国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【設(shè)計(jì)模式】Head First 設(shè)計(jì)模式——策略模式 C++實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【設(shè)計(jì)模式】Head First 設(shè)計(jì)模式——策略模式 C++實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

設(shè)計(jì)模式最大的作用就是在變化和穩(wěn)定中間尋找隔離點(diǎn),然后分離它們,從而管理變化。將變化像小兔子一樣關(guān)到籠子里,讓它在籠子里隨便跳,而不至于跳出來(lái)把你整個(gè)房間給污染掉。

設(shè)計(jì)思想

將行為想象為一族算法,定義算法族,分別封裝起來(lái),讓他們之間可以互相替換,使得算法的變化獨(dú)立于使用算法的客戶。

業(yè)務(wù)場(chǎng)景

假定現(xiàn)在讓你設(shè)計(jì)一個(gè)鴨子類(lèi),模仿這個(gè)世界上所有的鴨子,你會(huì)怎么做?

你可能會(huì)說(shuō)使用繼承,先定義一個(gè)Duck父類(lèi),然后寫(xiě)一些函數(shù):display表現(xiàn)鴨子的模樣,fly表現(xiàn)鴨子的飛行動(dòng)作,quack表現(xiàn)鴨子的叫聲…然后再寫(xiě)一些類(lèi)去繼承這個(gè)父類(lèi),一個(gè)一個(gè)重寫(xiě)父類(lèi)的函數(shù),模仿每種鴨子不同的長(zhǎng)相,飛行行為和叫聲。

如果你是一個(gè)初學(xué)者,你能想出這些并不奇怪,問(wèn)題也確確實(shí)實(shí)解決了,但卻并不是最佳方法。這種設(shè)計(jì)會(huì)造成大量的函數(shù)重復(fù):比如世界上現(xiàn)在有10種鴨子,有4種鴨子的模樣一模一樣,另外3種一模一樣,剩下的一模一樣,而你卻要一個(gè)一個(gè)去重復(fù)寫(xiě)display函數(shù);這種設(shè)計(jì)也并不利于未來(lái)的業(yè)務(wù)發(fā)展:比如現(xiàn)在你用繼承完成了所有的鴨子設(shè)計(jì),某一天,科學(xué)家又宣布新發(fā)現(xiàn)10種鴨子,而你還是要繼續(xù)改動(dòng)你的代碼,不斷的重寫(xiě),不斷的繼承。很快,你就會(huì)發(fā)現(xiàn),繼承并不是一個(gè)好辦法。

剛開(kāi)始出現(xiàn)繼承這種機(jī)制的時(shí)候,很多程序員便很喜歡用這種方法解決問(wèn)題。因?yàn)檫@很符合我們以往的認(rèn)知習(xí)慣:某某人的兒子可以使用父親手中的資源,這種使用似乎“理所應(yīng)當(dāng)”,很順其自然的一件事。但是,寫(xiě)代碼的時(shí)候你就會(huì)發(fā)現(xiàn)繼承能做的事情,往往組合也能實(shí)現(xiàn),并且有時(shí)候會(huì)比用繼承更好。

我們寫(xiě)程序的一個(gè)目標(biāo)叫軟件復(fù)用,如果你的代碼里出現(xiàn)很多一模一樣的函數(shù),顯然并不是一份很好的設(shè)計(jì)。而正如世界一樣,我們的代碼也需要與時(shí)俱進(jìn),否則就會(huì)死亡。一份程序在剛寫(xiě)好的時(shí)候僅僅是開(kāi)始,后期花在維護(hù),改進(jìn),更新上的時(shí)間要遠(yuǎn)遠(yuǎn)多于剛開(kāi)始開(kāi)發(fā)的時(shí)間,這些就是所謂的“change”,正是這些變化才造成了你不斷的加班,正如前面讓你設(shè)計(jì)鴨子類(lèi)一樣,某天新發(fā)現(xiàn)10種鴨子,而你為了完成設(shè)計(jì),可能就要被迫加班。

那么應(yīng)該采取什么樣的設(shè)計(jì)才能有效的抵御變化,少加班呢?

我們有一個(gè)設(shè)計(jì)原則叫做:找出應(yīng)用中可能需要變化之處,把他們獨(dú)立出來(lái),不要和穩(wěn)定的代碼混在一起。

換句話說(shuō),如果每次新的需求依賴(lài),都會(huì)使某些方面的代碼發(fā)生變化,那么你就可以確定,這部分的代碼需要被抽離,和其他穩(wěn)定的代碼有所區(qū)分。也就是說(shuō)把會(huì)變化的部分取出并封裝起來(lái),以便以后可以輕易地改動(dòng)以擴(kuò)充此部分而不影響其它部分。

這個(gè)概念很簡(jiǎn)單,幾乎是每個(gè)設(shè)計(jì)模式背后的精神所在。所有的設(shè)計(jì)模式都提供了一套方法讓“系統(tǒng)中的某部分改變不會(huì)影響其它部分”。

策略模式代碼案例

封裝飛行行為;

class FlyBehavior
{
public:
    virtual void fly() = 0;
};

class FlyWithWings : public FlyBehavior
{
public:
    void fly()
    {
        cout << "Fly with Wings..." << endl;
    }
};

class FlyNoway : public FlyBehavior
{
public:
    void fly()
    {
        cout << "i can not fly..." << endl;
    }
};

class FlyWithRockets : public FlyBehavior
{
public:
    void fly()
    {
        cout << "Fly with Rockets..." << endl;
    }
};

封裝叫聲行為;

class FlyBehavior
{
public:
    virtual void fly() = 0;
};

class FlyWithWings : public FlyBehavior
{
public:
    void fly()
    {
        cout << "Fly with Wings..." << endl;
    }
};

class FlyNoway : public FlyBehavior
{
public:
    void fly()
    {
        cout << "i can not fly..." << endl;
    }
};

class FlyWithRockets : public FlyBehavior
{
public:
    void fly()
    {
        cout << "Fly with Rockets..." << endl;
    }
};

duck類(lèi)委托飛行行為與叫聲行為:

class Duck
{
public:
    FlyBehavior*   flyBehavior;
    QuackBehavior* quackBehavior;

    void speak()
    {
        flyBehavior->fly();
        quackBehavior->quack();
    }

    Duck(FlyBehavior* fly, QuackBehavior* quack)
    {
        this->flyBehavior   = fly;
        this->quackBehavior = quack;
    }
};

實(shí)現(xiàn)具體的鴨子:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-678706.html

class Duck1 : public Duck
{
public:
    Duck1(FlyBehavior* fly, QuackBehavior* quack) : Duck(fly, quack) {}
};

到了這里,關(guān)于【設(shè)計(jì)模式】Head First 設(shè)計(jì)模式——策略模式 C++實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【設(shè)計(jì)模式】Head First 設(shè)計(jì)模式——觀察者模式 C++實(shí)現(xiàn)

    設(shè)計(jì)模式最大的作用就是在變化和穩(wěn)定中間尋找隔離點(diǎn),然后分離它們,從而管理變化。將變化像小兔子一樣關(guān)到籠子里,讓它在籠子里隨便跳,而不至于跳出來(lái)把你整個(gè)房間給污染掉。 主題對(duì)象(出版者)管理某些數(shù)據(jù),當(dāng)主題內(nèi)的數(shù)據(jù)改變,就會(huì)通知觀察者(訂閱者)。

    2024年02月10日
    瀏覽(27)
  • 【Head First 設(shè)計(jì)模式】-- 觀察者模式

    【Head First 設(shè)計(jì)模式】-- 觀察者模式

    客戶有一個(gè)WeatherData對(duì)象,負(fù)責(zé)追蹤溫度、濕度和氣壓等數(shù)據(jù)。現(xiàn)在客戶給我們提了個(gè)需求,讓我們利用WeatherData對(duì)象取得數(shù)據(jù),并更新三個(gè)布告板:目前狀況、氣象統(tǒng)計(jì)和天氣預(yù)報(bào)。 WeatherData對(duì)象提供了4個(gè)接口: getTemperature():獲取溫度 getHumidity():獲取濕度 getPressure():獲

    2024年02月05日
    瀏覽(16)
  • (十)Head first design patterns組合模式(c++)

    (十)Head first design patterns組合模式(c++)

    組合模式在參考鏈接中已經(jīng)講得很好了,這里只簡(jiǎn)單講講就好。 組合模式的意圖是表達(dá)部分-整體層次結(jié)構(gòu)。 當(dāng)你需要管理一個(gè)組合對(duì)象,又要管理這個(gè)組合對(duì)象的單個(gè)對(duì)象。這個(gè)時(shí)候就可以讓這個(gè)組合對(duì)象和單個(gè)對(duì)象繼承同一個(gè)基類(lèi),以便用基類(lèi)指針做統(tǒng)一管理。 當(dāng)基類(lèi)指

    2024年01月23日
    瀏覽(16)
  • (十一)Head first design patterns狀態(tài)模式(c++)

    (十一)Head first design patterns狀態(tài)模式(c++)

    如何去描述狀態(tài)機(jī)? 假設(shè)你需要實(shí)例化一臺(tái)電梯,并模仿出電梯的四個(gè)狀態(tài):開(kāi)啟、關(guān)閉、運(yùn)行、停止。也許你會(huì)這么寫(xiě) 這樣寫(xiě)未免太草率了。因?yàn)殡娞菰陂T(mén)開(kāi)啟的時(shí)候一般是不能運(yùn)行的,在運(yùn)行的時(shí)候一般也不會(huì)門(mén)開(kāi)啟,而在停止工作狀態(tài)一般不會(huì)再去執(zhí)行關(guān)門(mén)這個(gè)動(dòng)作

    2024年01月23日
    瀏覽(23)
  • (十三)Head first design patterns原型模式(c++)

    原型模式就是就是對(duì)對(duì)象的克隆。有一些私有變量外界難以訪問(wèn),而原型模式可以做到對(duì)原型一比一的復(fù)刻。 其關(guān)鍵代碼為下面的clone方法。此方法將本對(duì)象進(jìn)行復(fù)制傳遞出去。 C++設(shè)計(jì)模式(10)——原型模式_c++原型模式-CSDN博客

    2024年01月23日
    瀏覽(19)
  • (十二)Head first design patterns代理模式(c++)

    (十二)Head first design patterns代理模式(c++)

    代理模式:創(chuàng)建一個(gè)proxy對(duì)象,并為這個(gè)對(duì)象提供替身或者占位符以對(duì)這個(gè)對(duì)象進(jìn)行控制。 典型例子:智能指針... 例子:比如說(shuō)有一個(gè)talk接口,所有的people需要實(shí)現(xiàn)talk接口。但有些人有唱歌技能。不能在talk接口中實(shí)現(xiàn)sing功能,又不能在所有的people中實(shí)現(xiàn)sing功能。于是可以

    2024年01月23日
    瀏覽(18)
  • C++ 設(shè)計(jì)模式之策略模式

    C++ 設(shè)計(jì)模式之策略模式

    【聲明】本題目來(lái)源于卡碼網(wǎng)(題目頁(yè)面 (kamacoder.com)) 【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】 【設(shè)計(jì)模式大綱】 【簡(jiǎn)介】什么是策略模式 (第14種模式) ? ? ? ? 策略模式是?種 ?為型設(shè)計(jì)模式 ,它定義了?系列算法(這些算法完成的是相同的?作

    2024年01月17日
    瀏覽(48)
  • C++設(shè)計(jì)模式21:策略模式

    C++ 23種設(shè)計(jì)模式系列文章目錄 創(chuàng)建型模式 第1式 工廠方法模式 第2式 抽象工廠模式 第3式 單例模式 第4式 建造者模式 第5式 原型模式 結(jié)構(gòu)型模式 第6式 適配器模式 第7式 橋接模式 第8式 組合模式

    2024年02月02日
    瀏覽(20)
  • (十四)Head first design patterns建造者模式(c++)

    (十四)Head first design patterns建造者模式(c++)

    建造者把產(chǎn)品細(xì)節(jié)的實(shí)現(xiàn)過(guò)程單獨(dú)封裝成類(lèi),完成產(chǎn)品本身和創(chuàng)建產(chǎn)品之間的解耦。每一個(gè)建造者都相對(duì)獨(dú)立,因此在建造細(xì)節(jié)實(shí)現(xiàn)方面實(shí)現(xiàn)了靈活性和可擴(kuò)展性。 建造者模式和工廠模式的區(qū)別:工廠模式關(guān)心把這個(gè)產(chǎn)品創(chuàng)建出來(lái),而不關(guān)心其細(xì)節(jié);建造者模式不僅需要把產(chǎn)

    2024年01月24日
    瀏覽(7)
  • 【C++ 設(shè)計(jì)模式】策略模式與簡(jiǎn)單工廠模式的結(jié)合

    【C++ 設(shè)計(jì)模式】策略模式與簡(jiǎn)單工廠模式的結(jié)合

    在軟件設(shè)計(jì)中,常常會(huì)遇到需要根據(jù)不同情況選擇不同算法或行為的情況。策略模式和簡(jiǎn)單工廠模式是兩種常見(jiàn)的設(shè)計(jì)模式,它們分別解決了對(duì)象行為的抽象和對(duì)象創(chuàng)建的抽象問(wèn)題。在某些情況下,將這兩種模式結(jié)合起來(lái)可以更好地滿足實(shí)際需求,提高代碼的靈活性和可維護(hù)

    2024年03月16日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包