定義不同:裏希特替代原理是壹個關於子類和父類的原理;依賴倒置原則是壹個關於抽象和細節的原則。
適用範圍不同:依賴倒置原則的適用範圍比裏克特替代原則更廣。
涉及的對象關系不同:李希特替代原理中的子類有各自的獨立性;依賴倒置原則中的細節依賴於抽象。
衍生知識點:
壹、李希特替代原則
定義1:如果對於T1類型的每個對象o1都有壹個T2類型的對象o2,使得當所有對象o1被o2替換時,T1定義的所有程序P的行為不變,那麽T2類型是T1類型的子類型。
定義2:對基類的所有引用必須能夠透明地使用其子類的對象。
壹般來說,子類可以擴展父類的功能,但不能改變父類原有的功能。它是OCP的延伸。它包含以下四層含義:
1.?子類可以抽象父類,但是不能覆蓋父類的非抽象方法。
2.?子類可以添加自己獨特的方法。
3.?當子類的方法重載父類的方法時,方法的前提條件(即方法的形參)比父類的方法的輸入寬松。
4.?子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)比父類的後置條件更嚴格。
第二,依賴倒置原則
定義:高層模塊不應該依賴底層模塊,但兩者都應該依賴它們的抽象;抽象不應該依賴於細節;細節要靠抽象。
問題的由來:A類直接依賴b類,如果要把A類變成依賴C類,必須通過修改A類的代碼來實現..在這種場景下,A類壹般是高層模塊,負責復雜的業務邏輯;b類和c類是底層模塊,負責基本的原子操作;如果修改A類,會給程序帶來不必要的風險。
解決方法:將類A改為依賴接口I,類B和類C分別實現接口I,類A通過接口I間接聯系類B和類C,這樣會大大降低修改類A的概率..
核心思想:面向接口編程。包含以下三點:
1.?低級模塊應該盡量有抽象類或接口,或者兩者都有。
2.?變量的聲明類型應該盡可能抽象。
3.?繼承時遵循裏氏震級替代原則