二 設計模式 裡式替換原則

2021-10-09 07:18:03 字數 1022 閱讀 1567

黎克特制替換原則由麻省理工學院電腦科學實驗室的裡斯科夫女士,在 1987 年的「物件導向技術的高峰會議」上發表的一篇文章《資料抽象和層次》裡提出來的,

她提出:繼承必須確保超類所擁有的性質在子類中仍然成立。

一、黎克特制替換原則的作用

黎克特制替換原則是實現開閉原則的重要方式之一。

它克服了繼承中重寫父類造成的可復用性變差的缺點。

它是動作正確性的保證。即類的擴充套件不會給已有的系統引入新的錯誤,降低了**出錯的可能性。

二、黎克特制替換原則的實現方法

黎克特制替換原則通俗來講就是:子類可以擴充套件父類的功能,但不能改變父類原有的功能。也就是說:子類繼承父類時,除新增新的方法完成新增功能外,盡量不要重寫父類的方法。

如果通過重寫父類的方法來完成新的功能,這樣寫起來雖然簡單,但是整個繼承體系的可復用性會比較差,特別是運用多型比較頻繁時,程式執行出錯的概率會非常大。

如果程式違背了黎克特制替換原則,則繼承類的物件在基類出現的地方會出現執行錯誤。這時其修正方法是:取消原來的繼承關係,重新設計它們之間的關係。

關於黎克特制替換原則的例子,最有名的是「正方形不是長方形」。當然,生活中也有很多類似的例子,例如,企鵝、鴕鳥和幾維鳥從生物學的角度來劃分,它們屬於鳥類;但從類的繼承關係來看,由於它們不能繼承「鳥」會飛的功能,所以它們不能定義成「鳥」的子類。。

三、**示例
分析:鳥一般都會飛行,如燕子的飛行速度大概是每小時 120 千公尺。但是紐西蘭的幾維鳥由於翅膀退化無法飛行。假如要設計乙個例項,計算這兩種鳥飛行 300 千公尺要花費的時間。顯然,拿燕子來測試這段**,結果正確,能計算出所需要的時間;但拿幾維鳥來測試,結果會發生「除零異常」或是「無窮大」,明顯不符合預期。

正確的做法是:取消幾維鳥原來的繼承關係,定義鳥和幾維鳥的更一般的父類,如動物類,它們都有奔跑的能力。幾維鳥的飛行速度雖然為 0,但奔跑速度不為 0,可以計算出其奔跑 300 千公尺所要花費的時間。

**傳送門

設計原則之里式替換原則

前言 最近降溫很厲害,走在路上呼呼的狂風刮在臉上,讓我無比懷戀家鄉的溫暖。現在要求自己早點休息,所以寫部落格的時間也從午夜變到了上午。今天就來聊一聊裡式替換原則吧 1 裡式替換原則是什麼 關於裡式這次詞語的由來,主要是因為這個原則是以為姓裡的女士提出的,所以叫里式。關於這個原則,在實際開發的時候,就...

設計模式 依賴倒轉原則和裡式替換原則

依賴倒轉原則原話解釋抽象不應該依賴細節,細節應該依賴物件,也就是要針對介面程式設計,不要對實現程式設計。官方定義兩方面 a.高層模組不應該依賴底層模組,兩個都應該依賴抽象 b.抽象不應該依賴細節,細節應該依賴抽象。對於抽象,所謂依賴了抽象的介面或抽象類就不怕更改,還需要介入介紹裡式替換原則。裡式替換...

設計模式之美07 裡式替換原則

子類可以替換程式中任何地方的父類,並且不影響原有的邏輯及正確性不被改變 例如下面的 雖然securitytransporter修改了sendrequest方法,但是在使用時邏輯沒變,符合裡式替換原則 public class transporter public response sendreque...