文章出處

缺點:耦合太緊密,Light發生變化將影響ToggleSwitch。

優點:ToggleSwitch依賴于抽象類Light,具有更高的穩定性,而BulbLight與TubeLight繼承自Light,可以根據"開放-封閉"原則進行擴展。只要Light不發生變化,BulbLight與TubeLight的變化就不會波及ToggleSwitch。
文章列表
一、DIP簡介(DIP--Dependency Inversion Principle):
1、高層模塊不應該依賴于低層模塊,二者都應該依賴于抽象。
2、抽象不應該依賴于細節,細節應該依賴于抽象。
2、抽象不應該依賴于細節,細節應該依賴于抽象。
高層模塊包含了一個應該程序中的重要的策略選擇和業務模型,正是這些高層模塊才使得其所有的應用程序區別于其他,如果高層依賴于低層,那么對低層模塊的改動就會直接影響到高層模塊,從而迫使它們依次做出改動。
二、舉例說明:
反面例子:

缺點:耦合太緊密,Light發生變化將影響ToggleSwitch。
解決辦法一:
將Light作成Abstract,然后具體類繼承自Light。
將Light作成Abstract,然后具體類繼承自Light。

優點:ToggleSwitch依賴于抽象類Light,具有更高的穩定性,而BulbLight與TubeLight繼承自Light,可以根據"開放-封閉"原則進行擴展。只要Light不發生變化,BulbLight與TubeLight的變化就不會波及ToggleSwitch。
缺點:如果用ToggleSwitch控制一臺電視就很困難了。總不能讓TV繼承自Light吧。
解決方法二:

優點:更為通用、更為穩定。
三、DIP優點:
使用傳統過程化程序設計所創建的依賴關系,策略依賴于細節,這是糟糕的,因為策略受到細節改變的影響。依賴倒置原則使細節和策略都依賴于抽象,抽象的穩定性決定了系統的穩定性。
四、啟發式規則:
1、任何變量都不應該持有一個指向具體類的指針或者引用
2、任何類都不應該從具體類派生(始于抽象,來自具體)
3、任何方法都不應該覆寫它的任何基類中的已經實現了的方法
2、任何類都不應該從具體類派生(始于抽象,來自具體)
3、任何方法都不應該覆寫它的任何基類中的已經實現了的方法
文章列表
全站熱搜