設計模式描述了軟件設計過程中某一類常見問題的一般性解決方案面向對象設計描述了面向對象設計過程中,特定場景下,類與相互通信的對象之間常見的組織關係
<設計模式:可複用面向對象軟件的基礎>GoF 23種設計模式
從編程語言直觀瞭解面向對象
面向對象3大機制
封裝,隱藏內部實現
繼承,複用現有代碼
多態,改寫對象行爲
從宏觀層面來看 面向對象的構建方式更能適應軟件的變化,能將變化所帶來的
影響減爲最小
從微觀層面來看 面向對象的方式更強調各個類的“責任”
對象是什麼?
從概念層面講,對象是某種擁有責任的抽象。
從規格層面講,對象是一系統可以被其他對象使用的公共接口。
從語言實現層面,對象封裝了代碼和數據。
怎麼才能設計好的面向對象?
遵循一定的面向對象設計原則。
熟悉一些典型的面向對象設計模式。
從設計原則到設計模式
1針對接口編程而不是針對實現編程
2優先使用對象組合,而不是類繼承
類繼承通常爲“白箱複用”,對象組合通常爲“黑箱複用”。繼承在某種程度
上破壞了封裝性,子類父類耦合度高;而對象組合則只要求被組合的對
象具有良好定義的接口,耦合度低。
3封裝變化點
使用封裝來創建對象之間的分界層,讓設計者可以在分界層的一側進行
修改,而不會對另一側產生不良的影響,從而實現層次間的鬆耦合。
4使用重構得到模式
設計模式的應用不宜先入爲主,一上來就使用
設計模式是對設計模式的最大誤用。沒有一步到位的設計模式。敏捷
軟件開發實踐提倡的“Refactoring to Patterns”是目前普遍公認的最好
的使用設計模式的方法。
幾條具體的設計原則
單一職責原則(SRP)
一個類應該僅有一個引起它變化的原因。
開放封閉原則(OCP)
軟件實體(類,模塊,函數)應該是可以擴展的,但是不可修改的(對擴展開放,對更改封閉)
Liskov替換原則(LSP)
子類必須能夠替換它們的基類
依賴倒置原則 (DIP)
高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象。
抽象不應該依賴於實現細節,實現細節應該依賴於抽象。
接口隔離原則(ISP)
不應該強迫客戶程序依賴於它們不用的方法。