變化是復用的天敵!
物件導向設計最大的優勢在於:抵禦變化
重新認識物件導向:
理解格力變化:從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響減為最小。
各司其職:從微觀層面來看,物件導向的方式更強調各個類的責任,由於需求變化導致的新增型別不應該影響原來型別的實現——所謂各司其職
物件是什麼?
從語言實現層面來看,物件封裝了**和資料
從規格層面講,物件是一系列可被使用的公共介面
從概念層面講,物件是某種擁有責任的抽象。
依賴倒置原則
高層模組(穩定)不應該依賴於底層模組(變化),二者都依賴於抽象(穩定)
抽象(穩定)不應該依賴於實現細節(變化),實現(變化)細節應該依賴於抽象(穩定)
開發封閉原則(ocp)
對擴充套件開放,對更改封閉。(優先新增**,而不是修改原來的**)
類模組應該是可擴充套件的,但是不可修改。
單一責任原則
乙個類應該僅有乙個引起變化它的原因。
變化的方向隱含著類的責任。
黎克特制替換原則
子類必須能夠替換他們的基類
繼承表達型別抽象
介面隔離原則
不應該強迫客戶程式依賴它們不用的方法。
介面應該小而完備
優先使用物件組合,而不是類繼承
類繼承通常為「白箱復用」,物件組合通常為「黑箱復用」
繼承在某種程度上破壞了封裝性,子類父類耦合度高
而物件組合則只要求被組合的物件具有良好的定義介面,耦合度低。
封裝變化點:(一側變化,一側穩定)
使用封裝來建立物件之間的分界層,讓設計者可以在分界層一側進行修改,而不會對另一側產生不良的影響,從而實現層次間的松耦合。
針對介面程式設計,而不是針對實現程式設計
不將變數型別宣告為某個特定的具體類,而是宣告為某個介面。
客戶程式無需獲知物件的具體型別,只需要知道物件所具有的介面。
減少系統中各部分的依賴關係,從而實現「高內聚低耦合」的型別設計方案。
介面標準化
設計模式學習筆記
1.簡單工廠模式 2.策略模式 3.單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因 4.開放 封閉原則 就是對軟體實體 類,模組,函式等 應該可以擴充套件,但是不可以修改,無論模組是多麼的 封閉 都會存在一些無法對之的封閉的變化。既然不可能完全封閉,設計人員就必須對他設計的模組應該對哪種變...
設計模式學習筆記
1.單例模式 限制只產生乙個物件。if object null 2.簡單工廠模式 通過乙個工廠類根據條件來建立各種各樣的類。3.工廠方法模式 對工廠類進行改造分解,工廠類公升級為介面,一對一建立工廠類 針對要生產的類 實現工廠介面。問題來了 簡單工廠和工廠方法有什麼優劣?4.迭代器模式 iterat...
設計模式學習筆記
策略模式 用於情景 鴨子行為,鴨子型別可以繼承,鴨子行為變成介面,各種各樣的行為去實現介面,然後在具體類中呼叫行為介面具體實現子類。遊戲玩家 變換。觀察者模式 用於場景 主題 觀察者 天氣預報資料展示,當氣象站收集到新的資料時,像各個面板推送最新的資料,面板顯示最新資料。裝飾者模式 用於場景 飲料加...