小菜學設計模式——里氏替換原則

    背景

    本文標題爲何叫小菜學習設計模式,緣由是本文內容主要是學習《大話設計模式》時的筆記摘要部分,固然,並非記錄書中小菜的學習過程,這個徹底沒有意義,而是指本人學習設計模式的成長之旅。編程

    真誠的但願本身可以從一名小菜成長爲一名大鳥!
設計模式

    編寫的程序應該知足:
學習

    1)可維護
spa

    2)可擴展設計

    3)可複用
orm

    4)夠靈活
對象

    廢話少說,言歸正傳,設計模式原則之:里氏替換原則
繼承

    書面理解

    里氏替換原則:一個軟件實體若是使用的是父類的話,那麼必定適用與其子類,並且它察覺不出父類對象和子類對象的區別。也就是說,在軟件裏面,把父類都替換成它的子類,程序的行爲沒有變化。接口

    子類型必須可以替換掉他們的父類型。it

    只有當子類能夠替換其父類,軟件單位的功能不受到影響,父類才能真正被調用,而子類也可以在父類的基礎上增長新的行爲。

    因爲子類型的可替換性才使得使用父類類型的模塊在無需修改的狀況下就能夠擴展,其實也就是對內關閉,對外開放。

    里氏替換原則實際上是在詮釋依賴倒轉原則,依賴倒轉能夠說是面向對象設計的標誌,用哪一種語言編寫程序不重要,若是編寫時考慮的是如何針對抽象編程而不是針對具體細節編程,即便程中全部的依賴關係都是終止於抽象類或者接口,那就是面向對象的設計,不然就是面向過程化的設計。


    我的的理解

    里氏替換原則的意義在於面向對象的多態,之前以爲多態就是不一樣的表現形式,並且一直以爲重寫的多態意義不大,反而以爲是重載的多態更加讓人印象深入。其實面向對象的三大特徵之一的多態是很是有用的,尤爲是重寫,由於重寫的多態是一種面向抽象,然而重載的多態實際上是一種面向過程。重寫是運行是才知道抽象的具體實現,重載是在程序編譯時就已經決定了這個程序的具體執行。

    不管是依賴倒轉仍是里氏替換,兩者其實都是創建在多態的基礎上,經過調用通用一致的接口,然而具體的實現這是子類來完成,因此一來便於擴展,而來便於維護。

    里氏替換要求了:「全部的子類都是父類,可是父類卻不必定是子類」,正是由於「子類是父類」,因此調用父類(統一)的時候,經過多態轉到了子類的調用,那麼依賴倒轉原則纔會顯得有意義。

    那麼,對於之後多個模塊相互集成的時候,儘可能使用接口集成,而不要依賴具體的類來完成。

    另外,說到里氏替換原則,請記住一個經典再經典不過的例子,那就是企鵝是鳥嗎?生物學的角度企鵝是鳥,可是面向對象編程則企鵝不能繼承鳥,緣由是根據里氏替換原則,「子類就是父類」,鳥是能夠飛的,可是企鵝不會飛,因此企鵝若是繼承了鳥他就不知足里氏替換原則。

相關文章
相關標籤/搜索