1. 程式人生 > >JAVA模式學習:里氏代換原則(一)

JAVA模式學習:里氏代換原則(一)

 

里氏代換原則(Liskov Substition Principle)

里氏代換原則(LSP)的準確描述:如果對每一個型別為T1的物件o1,都有型別為T2的物件o2,使得T1定義的所有程式p在所有物件o1都代換成o2的時候,程式p的行為沒有變化,那麼型別T2是型別T1的子型別。    對於里氏代換原則來說反過來是不成立的。 Java對里氏代換原則的支援   這裡會有一個很經典的JAVA乃至是所有面向物件語言的一個經典問題。如果在父類中有一個public的方法。問是否可以在子型別中overload成private?利用里氏代換原則我們就可以很清楚的理解這個問題。假設這個命題是成立的,那麼我們根據里氏代換原則將出現的父型別public方法替換成子型別的private方法。那麼這裡會出現一個問題。由於子型別的相應方法是private的,他將不能被客戶端呼叫。到這裡這個命題就出現了矛盾。所以在父類中有一個public的方法。問是不可以在子型別中overload成private。 對於這一點JAVA編譯器會對其經行檢查,在編譯的時候就不會讓這種型別的程式通過。 Java對里氏代換原則的侷限
Java對里氏代換原則的侷限體現在JAVA編譯器只對LSP的精度經行檢查,不能檢查一個系統在現實和商業邏輯上的滿足。 里氏代換原則與幾種模式策略模式(Strategy):如果有一組演算法,那麼將每一個演算法封裝起來,使他們可以互換。 封裝的概念不難理解,使所有的演算法可以互換則需要將所有的具體策略角色放到一個型別等級結構中,使他們有共同的介面。這就是LSP在策略模式中的真實體現。 合成模式(Composite):通過樹結構描述整體與部分的關係。從而將單純元素與複合元素同等看待。由於單純元素和複合元素都是抽象元素的子類。因此,兩者都可以替換抽象元素出現在的任何地方。 代理模式(Proxy):
代理模式給某一個物件提供一個代理物件,並有代理物件控制對原物件的引用,代理物件模式能成立的關鍵,就在於代理模式與真實主題模式都是抽象主題角色的子類,客戶端只知道抽象主題,而代理主題可以替換抽象主題出現在任何需要的地方,而真實主題隱藏在幕後  

相關推薦

JAVA模式學習:里氏代換原則()

  里氏代換原則(Liskov Substition Principle) 里氏代換原則(LSP)的準確描述:如果對每一個型別為T1的物件o1,都有型別為T2的物件o2,使得T1定義的所有程式p在所有物件o1都代換成o2的時候,程式p的行為沒有變化,那麼型別T2是型別T1的子

Java設計模式——里氏代換原則

一、什麼是里氏代換原則? 一個軟體實體如果使用的是一個基類的話,那麼一定適用於其子類,而且它根本不能察覺出基類物件和子類物件的區別。比如,假設有兩個類,一個是Base類,另一個是Derived類,並且Derived類是Base類的子類。那麼一個方法如果可以接受基類物件Bas

軟體架構與模式(依賴注入 控制反轉 依賴倒置原則 開閉原則 單一職責原則 介面隔離原則 里氏代換原則)

名詞解釋:   依賴:  一個獨立元素的變化會影響到相關的元素   派生:  一個類是由其他類衍生出的,子類繼承了基類的結構(屬性的名詞和型別)方法   抽象:  去掉每個不重要的細節,專

設計模式——里氏代換原則

第六章 里氏代換原則       里氏代換原則:子型別必須能夠替換掉它們的父型別。即,一個軟體實體如果使用的是一個父類的話,那麼一定適用於其子類,而且它覺察不出父類物件和子類物件的區別。也就是說,在軟體裡面,把父類替換成它的子類,程式的行為沒有變化。正是由於里氏代換原則的存

基本設計模式學習筆記:()常見的七種面向物件設計原則

0.概述      面向物件設計原則為支援可維護性複用而誕生,這些原則蘊含在很多設計模式中,他們是從許多設計方案中總結出來的指導性原則1.單一原則     一個類只負責一個功能領域中的相應職責,或者說:就一個類而言,應該只有一個引起它變化的原因。個人總結:將不同職責的方法放在

JAVA基礎學習之路(

個人理解 整形 之路 boolean mman 類型 布爾 屬性 註釋 JAVA基礎概念: PATHl: path屬於操作系統的屬性,是系統用來搜尋可執行文件的路徑,個人理解是類似於linux中的全局變量 CALSSPATH:java程序解釋類文件時加載文件的路徑 註釋

面向物件設計原則實踐:之四.里氏代換原則

五、里氏代換原則(LSP--Liskov Substitution Principle) 1. 定義 a). 如果對每一個型別為S的物件o1,都有型別為T的物件o2, 使得以T定義的所有程式P在所有的物件o1都代換成o2時,程式P的行為沒有變化, 那麼型別S是型別T的子型別。 b

java基礎學習總結(十):自動裝箱和自動拆箱

自動拆箱和自動裝箱 Java為每種基本資料型別都提供了對應的包裝器型別。舉個例子: public class TestMain { public static void main(String[] args) { Integer i = 10; } }

面向物件設計原則里氏代換原則

      例如有兩個類,一個類為BaseClass,另一個是SubClass類,並且SubClass類是BaseClass類的子類,那麼一個方法如果可以接受一個BaseClass型別的基類物件base的話,如:method1(base),那麼它必然可以接受一個BaseClass型別的子類物件sub,meth

Java架構學習(四十)SpringCloud&基礎回顧&使用Fegin客戶端呼叫&服務雪崩效應產生原因&Jmeter模擬服務雪崩效應&解決雪崩效應辦法&Hystrix解決雪崩效應&相關面試

前置知識 SpringCloud 是微服務解決框架,主要應用在RPC遠端呼叫。 2、裡面集成了Eureka註冊中心、Ribbon負載均衡客戶端、Zuul介面閘道器 分散式配置中心。 3、SpringCloud客戶端呼叫工具、rest、fegin。 4、Spri

過載和重寫,里氏代換原則詳解

方法過載是指同一個類中的多個方法具有相同的名字,但這些方法具有不同的引數列表,即引數的數量或引數型別不能完全相同 方法重寫是存在子父類之間的,子類定義的方法與父類中的方法具有相同的方法名字,相同的引數表和相同的返回型別       &n

里氏代換原則(Liskov Substitution Principle、LSP)

一、概念 氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承複用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被複用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而

Koffee設計模式學習之路() —— 模式學習總結思路

    這篇部落格沒有相關技術細節,僅作為自己對設計模式這個東西的一點感悟和以後設計模式系列部落格的一個寫作思路。     作為非科班出身,誤打誤撞進入程式設計的人,在上研究生期間對於程式的唯一要求就是:能用。彼時,不知道有面向物件,記憶體管理,多執行緒,

Java Web 學習筆記之十:RestEasy統一處理異常

JBoss RestEasy框架配置異常統一處理 前提 利用JBoss restEasy框架搭建的restful java web後臺應用 希望通過統一的方式對restful介面丟擲的異常進行

JAVA陣列學習之一:對維陣列進行逆序排列

Java中的陣列必須先初始化,然後才能使用。所謂初始化,就是為陣列中的元素分配記憶體空間,併為元素賦值。 陣列的初始化方式: 動態初始化:初始化時只指定陣列長度,由系統為陣列分配初始值。 靜態初始化:

里氏代換原則——及之我見

第7章 里氏代換原則(LSP) 里氏代換原則 我感覺就是一句話,簡單的說就是 子型別必須能夠替換他們的父型別。就這麼簡單 面向物件設計的重要原則是建立抽象化,並且從抽象化匯出具體化。具體化可以給出不同的版本,每個版本都給出不同的實現。 從抽象化到具體化的匯出要是用繼承關係

"圍觀"設計模式(2)--里氏替換原則(LSP,Liskov Substitution Principle)

在面向物件的程式設計中,里氏替換原則(Liskov Substitution principle)是對子型別的特別定義。它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次會議上名為“資料的抽象與層次”的演說中首先提出。里氏替換原則的內容可以描述為: “派生

里氏代換原則C#詳解

看了一大堆的資料講解關於里氏代換原則,在這裡我想分享給大家。 下面這段話來自百度百科,是這麼解釋里氏代換原則的: 里氏代換原則(Liskov Substitution Principle LSP)是面向物件設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子

依賴倒轉原則/里氏代換原則

1 抽象不應該依賴細節,細節應該依賴於抽象。高層模組不應該依賴底層模組,兩個都應該依賴抽象。  就是針對介面程式設計,不要對實先程式設計。 就好比,主機板,cpu,硬碟都是針對介面設計的,如果針對實習設計,記憶體就要對應到具體的某個品牌的主機板,就會出現 記憶體換了,主機板

面向物件原則--里氏代換原則

里氏代換原則(Liskov Substitution Principle LSP)面向物件設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承複用的基石,只有