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

2021-10-19 19:41:55 字數 1260 閱讀 2502

1)繼承包含這樣乙個含義:父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然他不強制要求所有子類遵循這些契約,但如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。

2)繼承給程式帶來便利與帶來了弊端。比如繼承會給程式帶來侵入性,程式可移植性降低,增加物件間的耦合度。如果這個類被其他類繼承,當這個類修改時,必須考慮到所有子類,並且父類修改後,所有子類的功能都有可能發生故障。

3)如何正確使用繼承 => 黎克特制替換原則

1)使用繼承時,遵循黎克特制替換原則,在子類中盡量不要重寫父類方法。

2)繼承實際上讓兩個類耦合性增強了,在適當情況下,可以通過聚合,組合,依賴來解決問題。

方案一

public

class

liskov

}/**

* 類a

*/classa}

/** * b類繼承a

* 新增乙個功能:完成兩個數相加,然後加9求和

* 問題 :

* 這裡無意識重寫了a類中方法,導致使用父類方法是出現了錯誤,這樣寫起來雖然簡單,但整個繼承體系復用性比較差。特別執行多型比較頻繁時候。

* 解決 :

* 父類和子類都繼承乙個更通俗的基類,原有的繼承關係去掉,採用依賴,服用,組合等關係代替。 => 方法二

*/class

bextends

apublic

intfunc2

(int a,

int b)

}

方案二

public

class

liskov2

}/**

* 建立乙個更基礎的基類

*/class

base

/** * 類a 繼承 類base

*/class

aextends

base

}/**

* 類b 繼承 類base

* 如果b要使用a類方法使用組合關係

*/class

bextends

base

public

intfunc2

(int a,

int b)

/** * 任然要使用a的方法

*/public

intfunc3

(int a,

int b)

}

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

設計模式 黎克特制替換原則 物件導向的語言繼承必不可少的,有如下優點 共享,減少建立類的工作量 提高 的重用性 提高 的可擴充套件性 提高 的可擴充套件性 提高產品 的開放性 繼承侵入性 只要繼承,必須擁有父類的內容 降低 的靈活性,子類必須擁有父類的屬性和方法 增強耦合性。黎克特制替換原則,為繼承...

設計模式 (黎克特制替換原則)

黎克特制替換原則的引入 是針對物件導向中的繼承的缺點 乙個原則首先先介紹下它的定義 黎克特制替換原則為繼承定義了規範,下面我用書中看到的例子來說 1.子類必須完全實現父類的方法 首先先定義乙個槍的抽象類 public abstract class abstractgun 實現類的定義,不同的槍枝進行...

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

設計模式 黎克特制替換原則 oo 中的繼承性的思考和說明 繼承包含這樣一層含義 父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。繼承在給程式設計帶來便利的同時,也帶來了弊端。比如使...