1. 程式人生 > >學習設計模式 - 六大基本原則之裏氏替換原則

學習設計模式 - 六大基本原則之裏氏替換原則

bili 傳遞 如何使用 兼容 秦小波 ati ace 繼續 pointer

  設計模式總共有六大基本原則,統稱為SOLID (穩定)原則,分別是S-單一職責原則(Single Responsibility Principle), O-開閉原則(Open closed Principle),L-裏氏替換原則(Liskov Substitution Principle),L-迪米特法則(Law of Demeter),I-接口隔離原則(Interface Segregation Principle),D-依賴倒置原則(Dependence Invension Principle)。


L-裏氏替換原則(Liskov Substitution Principle)

一、定義

  所有引用基類的地方,都必須能透明的使用其子類的對象(Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it)。

二、理解

  凡是父類出現的地方,子類就可以出現,並且不會出現任何錯誤或異常。這個原則的用意是在告誡我們,子類繼承父類要完全可以承擔父類的職責,當一個子類不能完全實現父類的業務邏輯時,需要使用依賴、聚集、組合等關系替代。裏氏替換原則是實現依賴倒置原則的重要保障。

三、如何使用裏氏替換原則

  使用裏氏替換原則,我們要牢牢把握住裏氏替換原則的核心——凡是父類出現的地方,子類就可以出現,並且不會出現任何錯誤和異常。當我們用子類代替父類的位置時,我們需要考慮父類方法參數當做子類方法參數是否合適、子類方法輸出結果是否在父類方法輸出結果範圍之內、子類方法實現是否可以完全實現父類的方法。所以,裏氏替換原則有如下使用準則:

  1. 子類必須完全實現父類的方法

  2. 子類可以有自己的行為與外觀

  3. 覆蓋或實現父類的方法輸入參數可以被放大

  4. 覆寫或實現父類的方法時輸出結果可以被縮小

四、註意事項

  采用裏氏替換原則的目的就是增強程序的健壯性,版本升級時也可以保持非常好的兼容性,即時增加子類,原有的子類還可以繼續運行。在實際項目中,每個子類對應不同的業務含義,使用父類作為參數,傳遞不同的子類完成不同的業務邏輯。

  在項目中,采用裏氏替換原則時,盡量避免子類的“個性”。一旦子類擁有了“個性”,父子關系就難以調和。一方面,如果把子類當做父類使用,子類的“個性”就會被抹殺;另一方面,如果把子類單獨作為一個業務使用,就會讓代碼間的耦合關系變得撲朔迷離,缺乏類替換的標準。

學習資料:

《設計模式之禪》秦小波 著

學習設計模式 - 六大基本原則之裏氏替換原則