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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

企鹅的故事

發(fā)布時(shí)間:2023/12/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 企鹅的故事 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本故事的主人公是企鵝小黑,他是一只鳥.

他繼承了鳥可以飛的屬性,但是小黑并不會(huì)飛.所以在這里企鵝是不能繼承鳥的.

?

如果我們這樣繼承了就違反了軟件設(shè)計(jì)的原則:

里氏替換原則:子類必需能夠替換掉它的父類型.也就是子類指針可以賦給父類

也就是要保證父類具有的屬性子類也必需有.

只有滿足這一點(diǎn)才能夠完美的繼承復(fù)用.

?

可不可以把鳥會(huì)飛的這個(gè)屬性去掉呢?這樣的話就違反了另外一個(gè)原則:

開閉原則:對擴(kuò)展開放對修改關(guān)閉.

?

也可能會(huì)想到,給小黑增加一個(gè)屬性:.把父類中的飛覆蓋掉不會(huì)任何事不就行了嗎?會(huì)飛的鳥就不實(shí)現(xiàn)飛的屬性,不會(huì)飛的就增加一個(gè)不做事.但這樣也不是很好吧,對每一個(gè)鳥類都要去考慮,要不要這個(gè)屬性多累啊.

?

但是現(xiàn)在假設(shè)我們就這么做:

小黑 = new 企鵝();

小黑.();

?

?

void 動(dòng)物世界::運(yùn)動(dòng)( tmp)

{

???????? tmp.();

}

動(dòng)物世界 aa;

aa.運(yùn)動(dòng)(new 企鵝());

?

這樣使用是不是很舒服啊,呵呵.只有子類型的可替換性才使得父類型的模塊在無需修改的情況下就可擴(kuò)展.所以在設(shè)計(jì)的時(shí)候一定要符合里氏替換原則.

?

?

這里用到了另外一個(gè)原則:依賴倒轉(zhuǎn)原則.

前段時(shí)候我可能說的不是很明白.

?

依賴倒轉(zhuǎn)原則:

高層模塊都依賴于抽象不依賴于具體實(shí)現(xiàn). 在這里動(dòng)物世界這個(gè)類沒有直接去使用企鵝這個(gè)類.

?

上面我們雖然假設(shè)企鵝可以繼承父類的飛的屬性,但這是假設(shè).現(xiàn)在應(yīng)該怎么進(jìn)行改進(jìn)呢?那就把飛的這個(gè)屬性給去掉吧,看下面的實(shí)現(xiàn)方法.

?

?

在這里我們使用策略模式.

?

企鵝從父類繼承了Flayable *flyornot的成員變量. 我們在初始化企鵝的時(shí)候就給這個(gè)變量賦成FlyNoWay;

flayornot = new FlyNoWay();

這樣在調(diào)用 flayornot.fly(); 的時(shí)候由于FlyNoWay里面的fly函數(shù)是這樣的:

?

class FlyNoWay

{

public:

???????? void fly()

???????? {

?????????????????? cout << “cann’t fly”;

???????? }

};

所以企鵝就飛不起來了.完美解決了這個(gè)問題.

?

?

策略模式要和簡單工廠模式時(shí)行對比,可以找到策略模式的缺點(diǎn),還有他們的共同點(diǎn)..

?

?

總結(jié)

以上是生活随笔為你收集整理的企鹅的故事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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