要針對接口編程,而不是針對實現編程。
傳遞參數,或者在組合聚合關系中,儘量引用層次高的類。
主要是在構造對象時可以動態的創建各種具體對象,當然如果一些具體類比較穩定,就不必再弄一個抽象類做它的父類,這樣有畫蛇添足的感覺。
優點:
系統擴展靈活。
缺點:
需要大量的類。
開閉原則的主要機制就是依賴倒轉原則,這個原則的內容是:要依賴於抽象,不要依賴於具體,即要針對接口編程,不針對實現編程。
依賴也就是耦合,共分為下面3種。
零耦合(Nil Coupling)關係:兩個類沒有依賴關係。
具體耦合(Concrete Coupling)關係:兩個具體的類之間有依賴關係,如果一個具體類直接引用另外一個具體類,就是這種關係。
抽象耦合(Abstract Coupling)關係:這種關係發生在一個具體類和一個抽象類之間,這樣就使必須發生關係的類之間保持最大的靈活性。
依賴倒轉原則要求客戶端依賴於抽象耦合,抽象不應當依賴於細節,細節應當依賴於抽象。這個原則的另外一個表述就是:要針對接口編程,不要對實現編程。程式在需要引用一個對象時,應當儘可能地使用抽象類型作為變數的靜態類型,這就是針對接口編程的含義。依賴倒轉原則是達到開閉原則的途徑。
要做到依賴倒轉原則,使用抽象方式耦合是關鍵。由於一個抽象耦合總要涉及具體類從抽象類繼承,並且需要保證在任何引用到某類的地方都可以改換成其子類,因此,里氏代換原則是依賴倒轉原則的基礎,依賴倒轉原則是OOD的核心原則,設計模式的研究和套用都是用它作為指導原則的。
再拿上一節的正方形和長方形為例,在最後的測試函式中,正確的方式是使用抽象類作為函式參數:
public class BastTest {
public void zoom(Base base, int width, int height) {
base.zoom(width, height);
}
}
即針對抽象類編程,如果將它換成如下的針對具體類的操作:
public class BastTest {
public void zoom(Rectangle rectangle, int width, int height) {
rectangle.zoom(width, height);
}
}
這樣該類就違反了依賴倒轉原則,就不能夠復用做正方形的操作了。
依賴倒轉原則雖然強大,但是也很難實現。另外,依賴倒轉原則是假定所有的具體類都會變化,這也不是全對,有些具體類就相當穩定。使用這個類的客戶端就完全可以依賴這個具體類,而不用再弄一個抽象類。
相關詞條
-
依賴倒轉
依賴倒轉--指在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。簡單的說,子類型能夠替換掉它們的父類型。依賴性倒轉其實可以說是面向對象設計的標誌,...
定義 依賴倒轉原則 詳細 例子 分類 -
設計模式[劉偉主編書籍]
代換原則定義2.4.2里氏代換原則分析2.4.3里氏代換原則實例2.5依賴倒轉原則2.5.1依賴倒轉原則定義2.5.2依賴倒轉原則分析2.5.3依賴倒轉原則實例2.6接口隔離原則2.6.1接口隔離原則定義2.6.2接口...
書籍信息 內容簡介 圖書目錄 -
可復用性
。 系統可擴展性由“開-閉”原則、里氏代換原則、依賴倒轉原則和...基類可以出現的地方,子類一定可以出現。依賴倒轉原則,是指要依賴於抽象...插入性由“開-閉”原則、里氏代換原則、依賴倒轉原則和組合/聚合復用原則所...
幫助 -
設計模式
,LSP)、依賴倒轉原則(Dependency Inversion...:可以說:里氏代換原則是繼承復用的一個基礎。依賴倒轉原則指在軟體裡面...先掌握設計模式,無疑是給了你剖析EJB或J2EE系統的一把利器。設計原則...
簡介 設計框架 設計原則 基本模式 設計步驟 -
設計模式[設計模式概念]
)、依賴倒轉原則(Dependency Inversion...:可以說:里氏代換原則是繼承復用的一個基礎。依賴倒轉原則指在軟體裡面,把父類都...設計模式,無疑是給了你剖析EJB或J2EE系統的一把利器。設計原則為什麼...
簡介 設計框架 設計原則 基本模式 設計步驟 -
《上帝擲骰子嗎》
《上帝擲骰子嗎》 摘要 愛因斯坦:「一個人的價值,應該看他貢獻了什麼,而不是他取得了什麼。」 愛因斯坦說:「我不相信上帝是靠擲骰...
《上帝擲骰子嗎》 序 第一章 黃金時代 第二章 烏雲 第三章 火流星 -
軟體設計模式
間的一種一對多的依賴關係,以便當一個對象的狀態發生改變時,所有依賴於它... while running job其他模型—視圖—控制器模式模式原則...復用,增加可維護性。那么怎么才能實現代碼復用呢?OO界有前輩的幾個原則...
簡介 歷史 模式格式 相近術語 模式原則 -
Design pattern
,搞笑!(JR)4 依賴倒轉原則抽象不應該依賴與細節,細節應當依賴與抽象...給了你剖析EJB或J2EE系統的一把利器。二、設計模式的原則近年來,大家都...,增加可維護性。那么怎么才能實現代碼復用呢?OO界有前輩的幾個原則:"開-閉...
-
模式設計
而隨心所欲,可謂OO之最高境界。呵呵,搞笑,搞笑!(JR) 4 依賴倒轉原則 抽象不應該依賴與細節,細節應當依賴與抽象。 要針對接口編程...模式不斷出現。模式設計的原則近年來,大家都開始注意設計模式。那么...
模式設計四人幫 模式設計的原則