設計模式七大設計原則之黎克特制替換原則

2021-10-02 15:19:33 字數 1205 閱讀 2118

定義:如果對某個型別為t1的物件o1,都有型別t2的物件o2,使得以t1定義的所有程式p中在所有的物件o1都替換成o2時,程式p的行為不會發生改變,那麼型別型別t2是型別t1的子型別。也就是說,程式中所有引用父類的地方必須可以透明地使用其子類的物件

在程式中如何遵循黎克特制替換原則

(1)在子類中盡量不要重寫父類中的方法

(2)當一定要重寫父類中的方法時,盡量解除父類和子類之間的繼承關係,而子類通過聚合、組合或者依賴等方法去使用父類中的方法。

場景:

父類a中有個加法,執行結果為傳進來的兩個引數之和,子類b繼承父類a,且重寫了父類的加法,但是程式設計師將執行結果改為傳進來的兩個引數之和再加一。在後期呼叫的時候程式設計師本意是想算出兩個數的和即可,呼叫b中加法時卻發現比結果多了1.

不符合黎克特制替換類圖:

**:

package com.ldx.liskov;

public

class

liskov

}classa}

class

bextends

a}

執行結果:

從結果可以看出,程式設計師會因為不遵守黎克特制替換原則而導致程式不會按著需求走,解決方案:解除a和b之間的繼承關係,而b類如果想要使用a類中方法則採用聚合、組合或者依賴的方式。

改進方案:符合黎克特制替換原則

類圖:**:

package com.ldx.liskov1;

public

class

liskov

}classa}

class

bpublic

inta_add

(int i1,

int i2)

}

執行結果:

小結:繼承給程式帶來方便的同時也造成了一定的弊端,增加了類之間的耦合度,除上面提及的子類重寫了方法造成的弊端外,如果父類方法改變,那也要考慮到其所有子類是否發生改變,這無疑增大了開發難度。因此黎克特制替換原則建議盡量使用聚合、組合或者依賴去取締繼承關係。

七大設計原則彙總:七大設計原則彙總

設計模式七大原則之黎克特制替換原則

如果對每個型別為t1 的物件 o1,都有型別為t2的物件o2,使得以t1定義的所以程式p中所有的物件o1都代換為o2時,程式p的行為不發生變化,那麼型別t2是型別t1的子型別。換句話說 所有引用基類的地方必須能透明地使用其子類的物件 使用繼承是遵循黎克特制替換原則意味著 在子類中盡量不要重寫父類方法...

設計模式 七大原則之 黎克特制替換原則

任何能使用父類物件的地方,都應該能透明的替換為子類物件 也就說,子類物件可以隨時隨地替換父類物件,且替換完以後,語法不會報錯,業務邏輯也不會出現問題 反例 正方形不是長方形 1.提高 餓的重用性 2.多型的前提 主要看有沒有 is a 關係a.主要看有沒有 is a 關係 b.在兩個類有了is a關...

設計模式七大原則之黎克特制替換原則

黎克特制替換原則 所有引用基類的地方,必須能透明的使用其子類的物件。通俗的理解 子類可以擴充套件父類的功能,但不能改變父類原有的功能。示例 1 電腦 2public abstract class computer36 7 8 膝上型電腦 9 10class laptopcommputer compu...