1.開發模式

一.人是一個經驗性的動物

      設計模式描述了軟件設計過程中某一類常見
問題的一般性的解決方案。
      面向對象設計模式描述了面向對象設計過程中、特
定場景下、類與相互通信的對象之間常見的組織關
系。

 

二.從編程語言直觀瞭解面向對象
• 各種面向對象編程語言相互有別,但都能看到它們對面向對象三大機
制的支持,即: “封裝、繼承、多態”
– 封裝,隱藏內部實現
– 繼承,複用現有代碼
– 多態,改寫對象行爲

 

三.從一個示例談起
我們需要設計一個人事管理系統,其中的一個功能是對各種不同類型
的員工,計算其當月的工資——不同類型的員工,擁有不同的薪金計
算制度。
示例場景:
結構化做法
1。獲得人事系統中所有可能的員工類型
2。根據不同的員工類型所對應的不同的薪金制度,計算其工資
enumEmployeeType{
Engineer;
Sales;
Manager;

}
// 計算工資程序
If ( type==EmployeeType.Engineer) {
……
}
else if (type== Employeetype.Sales) {
……
}

面向對象設計
1。根據不同的員工類型設計不同的類,並使這些類繼承自一個
Employee抽象類,其中有一個抽象方法GetSalary。
2。在各個不同的員工類中,根據自己的薪金制度,重寫(override)
GetSalary方法。
abstract class Employee{

public abstract intGetSalary();
}
class Engineer: Employee{

public override intGetSalary() {
……
}
}
class Sales: Employee{

public override intGetSalary() {
……
}
}
// 顯示工資程序
Employee e=
emFactory.GetEmployee(id);
MessageBox.Show( e.GetSalary());

 

四。從設計原則到設計模式
• 針對接口編程,而不是針對實現編程
– 客戶無需知道所使用對象的特定類型,只需要知道對象擁有客戶所期望
的接口。
• 優先使用對象組合,而不是類繼承
– 類繼承通常爲“白箱複用”,對象組合通常爲“黑箱複用”。繼承在某種程度
上破壞了封裝性,子類父類耦合度高;而對象組合則只要求被組合的對
象具有良好定義的接口,耦合度低。
• 封裝變化點
– 使用封裝來創建對象之間的分界層,讓設計者可以在分界層的一側進行
修改,而不會對另一側產生不良的影響,從而實現層次間的鬆耦合。
• 使用重構得到模式——設計模式的應用不宜先入爲主,一上來就使用
設計模式是對設計模式的最大誤用。沒有一步到位的設計模式。敏捷
軟件開發實踐提倡的“Refactoringto Patterns ”是目前普遍公認的最好
的使用設計模式的方法。

 

五。幾條更具體的設計原則
• 單一職責原則(SRP):
– 一個類應該僅有一個引起它變化的原因。
• 開放封閉原則(OCP):
– 類模塊應該是可擴展的,但是不可修改(對擴展開放,對更改封閉)
• Liskov 替換原則(LSP):
– 子類必須能夠替換它們的基類
• 依賴倒置原則(DIP):
– 高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象。
– 抽象不應該依賴於實現細節,實現細節應該依賴於抽象。
• 接口隔離原則(ISP):
– 不應該強迫客戶程序依賴於它們不用的方法。

 

六。總結
• 設計模式描述了軟件設計過程中某一類常見問題的一般性的解決方
案。面向對象設計模式描述了面向對象設計過程中、特定場景下、類
與相互通信的對象之間常見的組織關係。
• 深刻理解面向對象是學好設計模式的基礎,掌握一定的面向對象設計
原則才能把握面向對象設計模式的精髓,從而實現靈活運用設計模
式。
• 三大基本面向對象設計原則
– 針對接口編程,而不是針對實現編程
– 優先使用對象組合,而不是類繼承
– 封裝變化點
• 使用重構得到模式。敏捷軟件開發實踐提倡的“Refactoringto
Patterns”是目前普遍公認的最好的使用設計模式的方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章