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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

【设计模式系列】OO设计原则之LSP-Liskov替换原则

發(fā)布時(shí)間:2025/7/14 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式系列】OO设计原则之LSP-Liskov替换原则 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
概要 什么是所謂的替換原則?開(kāi)發(fā)中我們通常會(huì)通過(guò)繼承實(shí)現(xiàn)一些子類來(lái)達(dá)到功能的擴(kuò)展,比如假設(shè)我們有基類B,有個(gè)B類型的指針或引用作為某個(gè)函數(shù)的參數(shù),這時(shí)我們創(chuàng)建了子類C繼承于B,如果當(dāng)把指向C類對(duì)象的指針作為參數(shù)傳遞時(shí),出現(xiàn)了一些意料之外的異常時(shí),它就違反了LSP。說(shuō)的有點(diǎn)抽象,到實(shí)例再具體說(shuō)明。

目的 子類類型完全能替換基類類型而不會(huì)發(fā)生異常
實(shí)例與效果 舉個(gè)LSP經(jīng)典的例子來(lái)說(shuō)明下吧。 比如我們有個(gè)Rectangle,可以設(shè)定長(zhǎng)和寬,同時(shí)可以計(jì)算它的面積,我們還有正方形的需求,所以我們創(chuàng)建一個(gè)Square類,繼承于Rectangle。具體實(shí)現(xiàn)如下:
class Rectangle { public:virtual void SetWidth(int w) {mWidth = w;}virtual void SetHeigth(int h) {mHeigth = h;}virtual int GetArea() {return mWidth * mHeigth;} protected:int mWidth;int mHeigth; }; class Square extends Rectangle { public:virtual void SetWidth(int w) {mWidth = w;mHeigth = h;}virtual void SetHeigth(int h) {mHeigth = h;mWidth = w;} };
是不是覺(jué)得做得挺好,貌似沒(méi)有什么問(wèn)題?好,略微分析一下吧。比如我們一般會(huì)通過(guò)工廠類來(lái)獲得Rectangle*類型的對(duì)象,而在一些條件下用戶可能并不知道或者并不關(guān)心當(dāng)前指針是指向什么類型的對(duì)象(Rectangle?Square?),這時(shí)候問(wèn)題就來(lái)了。假設(shè)工廠類方法聲明為: Rectangle* RecFactory::GetInstance();//(static)
調(diào)用的代碼如下: Rectangle* rec = RecFactory.GetInstance(); rec.SetWidth(10); rec.SetHeigth(20); int area = rec.GetArea();
當(dāng)getInstance返回的是指向Square?的對(duì)象時(shí),調(diào)用方可能覺(jué)得結(jié)果應(yīng)該是200,而實(shí)際結(jié)果卻是400。原因很明顯,正方形Square的行為特性跟Rectangle不同,導(dǎo)致SetWidth,SetHeigth的行為跟基類的行為特性不一致,最終出現(xiàn)異常的結(jié)果。LSP就是這么一回事。

轉(zhuǎn)載于:https://www.cnblogs.com/secbook/archive/2012/03/31/2655130.html

總結(jié)

以上是生活随笔為你收集整理的【设计模式系列】OO设计原则之LSP-Liskov替换原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。