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

設(shè)計(jì)模式之Bridge模式的C++實(shí)現(xiàn)

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

目錄

1、Bridge模式的提出

2、Bridge模式的定義

3、Bridge模式總結(jié)

4、需求描述

5、多繼承方式實(shí)現(xiàn)

6、使用Bridge設(shè)計(jì)模式實(shí)現(xiàn)


1、Bridge模式的提出

? ? ? ? 在軟件功能模塊設(shè)計(jì)中,如果類(lèi)的實(shí)現(xiàn)功能劃分不清晰,使得繼承得到的子類(lèi)往往是隨著需求的變化,子類(lèi)急劇膨脹,充斥重復(fù)代碼。將類(lèi)要實(shí)現(xiàn)功能劃分清楚是設(shè)計(jì)較好軟件框架的關(guān)鍵。

2、Bridge模式的定義

? ? ? ? 對(duì)于類(lèi)的實(shí)現(xiàn)功能具有兩個(gè)變化的維度,甚至由多個(gè)維度的變化,使用類(lèi)的多繼承實(shí)現(xiàn)方式,會(huì)使子類(lèi)數(shù)目急劇膨脹。Bridge模式使用“對(duì)象間的組合關(guān)系”解耦抽象和實(shí)現(xiàn)之間固有的綁定關(guān)系,使得抽象和實(shí)現(xiàn)可以沿著各自的維度變化,即將不同的維度分別進(jìn)行抽象,然后各自根據(jù)變化維度進(jìn)行繼承。

3、Bridge模式總結(jié)

? ? ? ? Bridge模式的應(yīng)用一般在“兩個(gè)非常強(qiáng)的變化維度”,有時(shí)一個(gè)類(lèi)甚至有多個(gè)變化的維度,這時(shí)使用Bridge模式的擴(kuò)展模式來(lái)設(shè)計(jì)代碼。

4、需求描述

手機(jī)有固有屬性(材料、顏色、攝像頭個(gè)數(shù))和軟件屬性(開(kāi)機(jī)動(dòng)畫(huà)、網(wǎng)絡(luò)打印、支持app數(shù)目)。有2款A(yù)、B類(lèi)型手機(jī),A、B分別繼承手機(jī)的固有屬性功能。在A款基礎(chǔ)上又有2款Higher、Pro類(lèi)型,Higher、Pro分別繼承手機(jī)的軟件功能;在B款的基礎(chǔ)上也有2種Higher、Pro,這2種也分別繼承手機(jī)的軟件功能。

5、多繼承方式實(shí)現(xiàn)

#include <iostream>


class MobilePhone
{
public:
    //手機(jī)材質(zhì)
    virtual void PhoneMaterial()=0;
    //手機(jī)顏色
    virtual void PhoneColor()=0;
    //手機(jī)大小
    virtual void PhoneCameNum()=0;

    //開(kāi)機(jī)動(dòng)畫(huà)
    virtual void BootAnimation()=0;
    //網(wǎng)絡(luò)打印類(lèi)型
    virtual void NetPrintType()=0;
    //軟件支持?jǐn)?shù)目
    virtual void SoftSuppotNum()=0;

    virtual ~MobilePhone(){
    };


};

//下面的類(lèi)繼承關(guān)系中,不同層級(jí)的類(lèi)繼承不同抽象函數(shù),可以分函數(shù)抽象一個(gè)類(lèi),見(jiàn)Bridge模式。

class APhoneNoraml:public MobilePhone
{
public:
    virtual ~APhoneNoraml(){};

    virtual void PhoneMaterial()override{
        std::cout << "Glass material" << std::endl;
    };

    virtual void PhoneColor()override{
        std::cout << "2 Colors" << std::endl;
    };

    virtual void PhoneCameNum()override{
        std::cout << "2 CamNum" << std::endl;
    };
};

class BPhoneNoraml:public MobilePhone
{
public:
    virtual ~BPhoneNoraml(){};

    virtual void PhoneMaterial()override{
        std::cout << "Glass material" << std::endl;
    };

    virtual void PhoneColor()override{
        std::cout << "3 Colors" << std::endl;
    };

    virtual void PhoneCameNum()override{
        std::cout << "3 CamNum" << std::endl;
    };
};


class APhoneHiger:public APhoneNoraml
{
public:
    virtual ~APhoneHiger(){};

    virtual void BootAnimation()override{
        APhoneNoraml::PhoneMaterial();
        APhoneNoraml::PhoneColor();
        APhoneNoraml::PhoneCameNum();
        std::cout << "good luck" << std::endl;
    };

    virtual void NetPrintType()override{
        std::cout << "Support base txt type" << std::endl;
    };

    virtual void SoftSuppotNum()override{
        std::cout << "Support 20 app" << std::endl;
    };
};

class BPhoneHiger:public BPhoneNoraml
{
public:
    virtual ~BPhoneHiger(){};

    virtual void BootAnimation()override{
        BPhoneNoraml::PhoneMaterial();
        BPhoneNoraml::PhoneColor();
        BPhoneNoraml::PhoneCameNum();
        std::cout << "gook lunck" << std::endl;
    };

    virtual void NetPrintType()override{
        std::cout << "Support base txt type" << std::endl;
    };

    virtual void SoftSuppotNum()override{
        std::cout << "Support 20 app" << std::endl;
    };

};

class APhonePro:public APhoneNoraml
{
public:
    virtual ~APhonePro(){};

    virtual void BootAnimation()override{
        APhoneNoraml::PhoneMaterial();
        APhoneNoraml::PhoneColor();
        APhoneNoraml::PhoneCameNum();
        std::cout << "best wishes" << std::endl;
    };

    virtual void NetPrintType()override{
        std::cout << "Support base 3 type" << std::endl;
    };

    virtual void SoftSuppotNum()override{
        std::cout << "Support 30 app" << std::endl;
    };
};

class BPhonePro:public BPhoneNoraml
{
public:
    virtual ~BPhonePro(){};

    virtual void BootAnimation()override{
        BPhoneNoraml::PhoneMaterial();
        BPhoneNoraml::PhoneColor();
        BPhoneNoraml::PhoneCameNum();
        std::cout << "best wishes" << std::endl;
    };

    virtual void NetPrintType()override{
        std::cout << "Support base 3 type" << std::endl;
    };

    virtual void SoftSuppotNum()override{
        std::cout << "Support 30 app" << std::endl;
    };

};

int main()
{
    MobilePhone* higherA = new APhoneHiger();
    higherA->BootAnimation();
    higherA->NetPrintType();
    higherA->SoftSuppotNum();
    delete higherA;
    higherA = nullptr;


    MobilePhone* proA = new APhonePro();
    proA->BootAnimation();
    proA->NetPrintType();
    proA->SoftSuppotNum();
    delete proA;
    proA = nullptr;
    return 0;
}

運(yùn)行結(jié)果如下:

設(shè)計(jì)模式之Bridge模式的C++實(shí)現(xiàn),設(shè)計(jì)模式,C/C++語(yǔ)言,設(shè)計(jì)模式,橋接模式

6、使用Bridge設(shè)計(jì)模式實(shí)現(xiàn)

#include <iostream>

//將第一個(gè)變化維度的三個(gè)函數(shù)抽象成一個(gè)類(lèi),供第二層繼承使用
class MobilePhone
{
public:
    //手機(jī)材質(zhì)
    virtual void PhoneMaterial()=0;
    //手機(jī)顏色
    virtual void PhoneColor()=0;
    //手機(jī)大小
    virtual void PhoneCameNum()=0;
    virtual ~MobilePhone(){}
};

//將第二個(gè)變化維度的三個(gè)函數(shù)抽象出一個(gè)類(lèi),供第三層繼承使用
class MobileSoft
{
public:
    MobileSoft(MobilePhone* p):Imp(p){};
    MobilePhone *Imp;
    //開(kāi)機(jī)動(dòng)畫(huà)
    virtual void BootAnimation()=0;
    //網(wǎng)絡(luò)打印類(lèi)型
    virtual void NetPrintType()=0;
    //軟件支持?jǐn)?shù)目
    virtual void SoftSuppotNum()=0;
};

class APhoneNoraml:public MobilePhone
{
public:
    virtual ~APhoneNoraml(){};

    virtual void PhoneMaterial()override{
        std::cout << "Glass material" << std::endl;
    };

    virtual void PhoneColor()override{
        std::cout << "2 Colors" << std::endl;
    };

    virtual void PhoneCameNum()override{
        std::cout << "2 CamNum" << std::endl;
    };
};

class BPhoneNoraml:public MobilePhone
{
public:
    virtual ~BPhoneNoraml(){};

    virtual void PhoneMaterial()override{
        std::cout << "Glass material" << std::endl;
    };

    virtual void PhoneColor()override{
        std::cout << "3 Colors" << std::endl;
    };

    virtual void PhoneCameNum()override{
        std::cout << "3 CamNum" << std::endl;
    };
};

//在第三層繼承關(guān)系處使用對(duì)象組合。
class PhoneHiger:public MobileSoft
{
public:
    PhoneHiger(MobilePhone *p):MobileSoft(p){};
    virtual ~PhoneHiger(){};

    virtual void BootAnimation()override{
        Imp->PhoneMaterial();
        Imp->PhoneColor();
        Imp->PhoneCameNum();
        std::cout << "good luck" << std::endl;
    };

    virtual void NetPrintType()override{
        std::cout << "Support base txt type" << std::endl;
    };

    virtual void SoftSuppotNum()override{
        std::cout << "Support 20 app" << std::endl;
    };
};


class PhonePro:public MobileSoft
{
public:
    PhonePro(MobilePhone *p):MobileSoft(p){};
    virtual ~PhonePro(){};

    virtual void BootAnimation()override{
        Imp->PhoneMaterial();
        Imp->PhoneColor();
        Imp->PhoneCameNum();
        std::cout << "best wishes" << std::endl;
    };

    virtual void NetPrintType()override{
        std::cout << "Support base 3 type" << std::endl;
    };

    virtual void SoftSuppotNum()override{
        std::cout << "Support 30 app" << std::endl;
    };
};

int main()
{
    std::cout << " ************** PhoneHiger ************** " << std::endl;
    MobilePhone *normalA = new APhoneNoraml();
    MobileSoft *higherA = new PhoneHiger(normalA);
    higherA->BootAnimation();
    higherA->NetPrintType();
    higherA->SoftSuppotNum();

    std::cout << "\n ************** PhonePro ************** " << std::endl;
    MobilePhone *normalPro = new APhoneNoraml();
    MobileSoft *proA = new PhonePro(normalPro);
    proA->BootAnimation();
    proA->NetPrintType();
    proA->SoftSuppotNum();
    return 0;
}

運(yùn)行結(jié)果如下:

設(shè)計(jì)模式之Bridge模式的C++實(shí)現(xiàn),設(shè)計(jì)模式,C/C++語(yǔ)言,設(shè)計(jì)模式,橋接模式

? ? ? ?上面的代碼將不同的變化維度分別抽象成一個(gè)類(lèi),供子類(lèi)繼承;并且其中一個(gè)維度的繼承關(guān)系用“類(lèi)成員是基類(lèi)對(duì)象”組合的方式進(jìn)行替代,使功能類(lèi)代碼具有良好的擴(kuò)展性,也遵循單一職責(zé)原則。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-637309.html

到了這里,關(guān)于設(shè)計(jì)模式之Bridge模式的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)用戶(hù)投稿,該文觀點(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ì)模式之Bridge模式的C++實(shí)現(xiàn)

    設(shè)計(jì)模式之Bridge模式的C++實(shí)現(xiàn)

    目錄 1、Bridge模式的提出 2、Bridge模式的定義 3、Bridge模式總結(jié) 4、需求描述 5、多繼承方式實(shí)現(xiàn) 6、使用Bridge設(shè)計(jì)模式實(shí)現(xiàn) ? ? ? ? 在軟件功能模塊設(shè)計(jì)中,如果類(lèi)的實(shí)現(xiàn)功能劃分不清晰,使得繼承得到的子類(lèi)往往是隨著需求的變化,子類(lèi)急劇膨脹,充斥重復(fù)代碼。將類(lèi)要實(shí)現(xiàn)

    2024年02月13日
    瀏覽(23)
  • 用Rust實(shí)現(xiàn)23種設(shè)計(jì)模式之橋接模式

    橋接模式的優(yōu)點(diǎn): 橋接模式的設(shè)計(jì)目標(biāo)是將抽象部分和實(shí)現(xiàn)部分分離,使它們可以獨(dú)立變化。這種分離有以下幾個(gè)優(yōu)點(diǎn): 解耦和靈活性 :橋接模式可以將抽象部分和實(shí)現(xiàn)部分解耦,使它們可以獨(dú)立地變化。這樣,對(duì)于抽象部分的修改不會(huì)影響到實(shí)現(xiàn)部分,反之亦然。這種解

    2024年02月14日
    瀏覽(24)
  • 設(shè)計(jì)模式詳解-橋接模式

    類(lèi)型:結(jié)構(gòu)型模式 實(shí)現(xiàn)原理:將抽象類(lèi)和實(shí)現(xiàn)類(lèi)分離,使其獨(dú)立,然后使用接口再將二者連接起來(lái)。 意圖:將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。 主要解決:類(lèi)變化頻繁時(shí)用繼承可能會(huì)出現(xiàn)的類(lèi)爆炸問(wèn)題。 如何解決:減少類(lèi)的耦合關(guān)系,讓類(lèi)獨(dú)立變化。

    2024年02月12日
    瀏覽(23)
  • 設(shè)計(jì)模式之~橋接模式

    設(shè)計(jì)模式之~橋接模式

    橋接模式: ????????將抽象部分與它的實(shí)現(xiàn)部分分離,使他們都可以獨(dú)立地變化。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它通過(guò)提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來(lái)實(shí)現(xiàn)二者的解耦。 ????????什么叫抽象與它的實(shí)現(xiàn)分離,這并不是說(shuō),讓抽象類(lèi)與其派生類(lèi)分離,因

    2024年02月07日
    瀏覽(18)
  • 設(shè)計(jì)模式 07 橋接模式

    橋接模式(Bridge Pattern)屬于 結(jié)構(gòu)型 模式 橋接模式是將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它是一種對(duì)象結(jié)構(gòu)型模式,又稱(chēng)為 柄體 (Handle and Body)模式或 接口 (Interface)模式。 比如需要?jiǎng)?chuàng)建電腦對(duì)象,市面上的電腦非常多, 品牌 有華為、蘋(píng)果、聯(lián)

    2024年02月11日
    瀏覽(15)
  • 設(shè)計(jì)模式:橋接模式

    橋接模式(Bridge Pattern):旨在將抽象部分和實(shí)現(xiàn)部分解耦,使它們可以獨(dú)立地變化。這種模式通過(guò)將抽象和實(shí)現(xiàn)分離,使它們可以獨(dú)立地進(jìn)行擴(kuò)展和修改,而不會(huì)相互影響。它是一種對(duì)象結(jié)構(gòu)型模式,又稱(chēng)為柄體(Handle and Body)模式或接口(Interface)模式。 假如需要使用大

    2024年01月25日
    瀏覽(15)
  • 設(shè)計(jì)模式——橋接模式詳解

    設(shè)計(jì)模式——橋接模式詳解

    1.1?橋接模式的定義 維基百科: 橋接模式 是軟件設(shè)計(jì)模式中最復(fù)雜的模式之一,它把事物對(duì)象和其具體行為、具體特征分離開(kāi)來(lái),使它們可以各自獨(dú)立的變化。 百度百科: 橋接模式 是將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它是一種對(duì)象結(jié)構(gòu)型模式,

    2024年02月06日
    瀏覽(21)
  • 設(shè)計(jì)模式——橋接模式

    設(shè)計(jì)模式——橋接模式

    引用 橋 我們大家都熟悉,顧名思義就是用來(lái)將河的兩岸聯(lián)系起來(lái)的。而此處的橋是用來(lái)將兩個(gè)獨(dú)立的結(jié)構(gòu)聯(lián)系起來(lái),而這兩個(gè)被聯(lián)系起來(lái)的結(jié)構(gòu)可以獨(dú)立的變化,所有其他的理解只要建立在這個(gè)層面上就會(huì)比較容易。 基本介紹 橋接模式(Bridge)是指將實(shí)現(xiàn)與抽象放在兩個(gè)不

    2024年02月12日
    瀏覽(24)
  • 【設(shè)計(jì)模式】橋接模式

    【設(shè)計(jì)模式】橋接模式

    橋接(Bridge)是用于把抽象化與實(shí)現(xiàn)化解耦,使得二者可以獨(dú)立變化。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它通過(guò)提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來(lái)實(shí)現(xiàn)二者的解耦。 這種模式涉及到一個(gè)作為橋接的接口,使得實(shí)體類(lèi)的功能獨(dú)立于接口實(shí)現(xiàn)類(lèi),這兩種類(lèi)型的類(lèi)可被結(jié)

    2024年02月13日
    瀏覽(22)
  • 設(shè)計(jì)模式-橋接模式

    設(shè)計(jì)模式-橋接模式

    適配器模式 類(lèi)似,以后也會(huì)遇到意思接近一樣的設(shè)計(jì)模式。在開(kāi)發(fā)中一般多個(gè)模式混用,且根據(jù)不同的場(chǎng)景進(jìn)行搭配,橋接模式也是 結(jié)構(gòu)型模式 將抽象的部分和實(shí)現(xiàn)的部分分離,使它們都可以獨(dú)立的變化。通俗來(lái)說(shuō),就是通過(guò)組合來(lái) 橋接 其它的 行為或維度 與適配器模式業(yè)

    2024年02月11日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包