宣告:本系列為物件導向葵花寶典一書學習總結內容,原作者部落格鏈結
8. 設計原則
8.1. 內聚和耦合9. 設計模式內聚
是否專注模組的職責,是內聚性的充要條件
是否與模組處理的內容相關
耦合
耦合(或者稱依賴)是程式模組相互之間的依賴程度
內聚關注模組內部的元素結合程度,耦合關注模組之間的依賴程度
訊息耦合模組間的耦合關係表現在傳送和接收訊息
資料耦合兩個模組間通過引數(簡單型別或者複雜型別)傳遞基本資料,稱為資料耦合。
控制耦合當乙個模組通過某種方式( 傳參)來控制另外乙個模組的行為時,稱為控制耦合
全域性耦合當兩個模組共享相同的全域性資料,稱為全域性耦合
8.2. 類設計原則
srp(single responsibility principle)單一職責原則
用於類的設計
類的職責是站在其它類的角度來定義的
類的職責包含多個相關功能 乙個類有多個方法,這些
方法是相關的
srp不能應用於聚合類(多個職責類的組合)
ocp(open-closed principle)開閉原則
總的指導思想
提供者(生產者)增加新的功能,但使用者(消費者)不需要修改**
例如 a 類呼叫了b類的方法,則 a就是消費者,b就是生產者
所謂的增加新功能,並不是增加乙個全新的功能,而是原有的功能有了替代實現
lsp(liskov substitution principle)黎克特制替換原則
用於指導類繼承的設計
針對父類的單元測試用例,傳入子類是否也能夠測試通過
同乙個方法,子類可以有不同的實現,從而實現多型
isp(inte***ce segregation principle)介面隔離原則
用於指導介面的設計
客戶端不應該被強迫去依賴它們並不需要的介面
建議客戶端不需要知道整個類,只需要知道具有內聚介面的抽象父類即可
實現介面的類,可以替換 方法中的介面引數
dip(dependency inversion principle)依賴倒轉原則
用於指導如何抽象
高層模組不應該直接依賴低層模組,兩者都應該依賴抽象層(穩定的部分)
抽象不能依賴細節(變化的部分),細節必須依賴抽象(穩定的部分)
從不同的範圍角度看,模組的範圍不同 架構層-子系統 子系統-元件
高層模組基於抽象層程式設計 低層模組繼承或者實現抽象層
不要過度設計
9.1. 設計模式簡介模式描述了乙個在我們周圍不斷重**生的問題,以及該問題的解決方案的核心」,即:模式是重**生的問題的解決方案。
9.2. 設計模式只是一把錘子
兩個主要約束
1)設計模式解決的是「可復用」的設計問題;
2)設計模式應用的領域是「物件導向」;
9.3. 設計模式之道
設計模式的「道」就是用來指導我們什麼時候用設計模式,為什麼要用設計模式,
23 個設計模式只是告訴了我們 how,而設計模式之道卻可以告訴我們 why 和 where!
八字精解:找到變化(where),封裝變化(why)
「封裝變化」意味著將變化的影響範圍控制最小,將風險降到最低(不是拒絕變化)
9.4. 原則 vs 模式
設計原則主要用於指導「類的定義」的設計
設計模式主要用於指導「類的行為」的設計
9.5. 模式詳解
學習設計模式
學習設計模式的時候,我們必須深入理解某個設計模式是為了解決什麼變化引起的問題,
然後再看這個設計模式是如何應用「兩個基本點」對應的原則來封裝這個變化的。
應用設計模式
在實際應用的時候,我們不要一開始就想著要把某個模式塞到某個地方,
而是先找到可能變化的地方,再來看具體使用哪個模式可以封裝這種變化。
模式講解-案例
裝飾模式
更多模式請檢視原書講解。
設計模式系列 物件導向葵花寶典 物件導向基礎
宣告 本系列為物件導向葵花寶典一書學習總結內容,原作者部落格鏈結 書籍簡介 文中闡述了作者對物件導向的深入理解,全面闡述了物件導向的理論基礎,以及通過物件導向的實戰指導進行分析,尤為重點讓人容易忽視的需求分析過程,讓程式更具有建造者的設計氣息。最後一部分講解了物件導向的技巧,以及設計模式的內在剖析。...
設計模式系列 物件導向葵花寶典 物件導向實戰
宣告 本系列為物件導向葵花寶典一書學習總結內容,原作者部落格鏈結 3.物件全流程概述物件導向的技術流程可以概括如下 需求模型 通過和客戶溝通,結合行業經驗和知識,明確要求客戶的需求。領域模型 基於需求模型,提煉出領域相關的概念,為後面的物件導向設計打下基礎。領域模型 以領域模型為基礎,綜合物件導向的...
商業模式不是「葵花寶典」
我總覺得,創業者對於商業模式的狂熱追捧越來越走向了乙個誤區。此話怎講?因為模式說到底,實際上是一種複雜商業邏輯的簡化。模式的產業殺傷力越大,自殺的可能性也越大,比如順馳。最近因為新工作的關係,老跟創業 風投的朋友打交道。耳朵裡聽到最多的乙個詞是 商業模式 business model 自從本世紀初....