日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式原则之里氏替换原则

發布時間:2025/3/15 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式原则之里氏替换原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:https://mp.weixin.qq.com/s/Uq4g53cQ7YKAXP8TuRV2Gw

定義:?

?

????1:如果對每一個類型為 T1的對象 o1,都有類型為 T2 的對象o2,使得以 T1定義的所有程序 P 在所有的對象 o1 都代換成 o2 時,程序 P 的行為沒有發生變化,那么類型 T2 是類型 T1 的子類型。

?

????2:所有引用基類的地方必須能透明地使用其子類的對象

通俗來講:父類必須能夠使用子類替換

?

里氏替換原則能帶來哪些好處?

  • 里氏替換原則能夠將對于基類中定義的所有子程序,用在它的任何一個派生類中時的含義都應該是相同的。這樣繼承才不會增加復雜度,基類才能真正被復用,而派生類也能夠在基類的基礎上增加新的行為。繼承帶來的復雜度就降低了。

  • 針對基類編程可以提高代碼的復用性

  • ?

    ?

    如何保證遵循里氏替換原則

    ????繼承是保證里氏替換原則的前提,但是繼承也有不能滿足里氏替換原則的時候。此時我們可以采用如下兩種方法進行設計:

    ?

    1、重新提取公共部分的方法

    ?????把沖突的派生類與基類的共部分提取出來作為一個抽象基類,然后分別繼承這個類。

    ?

    2、改變繼承關系

    ?????即:從父子關系變為委派關系或兄弟關系。

    ?????可以把它們的一些公有特性提取到一個抽象接口,再分別實現。

    ?

    例如:

    ????最初發送郵件的設計如下:

    ?

    ? 考慮到給普通人發送郵件和給VIP用戶發送郵件中的send方法中的代碼有重復,遵從里氏替換原則,我們將共有部分的代碼提取出來,并改變CommonCustomer和VIPCustomer的繼承關系。修改之后如下:

    ?

    ?

    總結:

    里氏替換原則通俗的來講就是:子類可以擴展父類的功能,但不能改變父類原有的功能。

  • 子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。

  • 子類中可以增加自己特有的方法。

  • 當子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬松。

  • 當子類的方法實現父類的抽象方法時,方法的后置條件(即方法的返回值)要比父類更嚴格。

  • ?

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/xingzc/p/9066867.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的设计模式原则之里氏替换原则的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。