C++設(shè)計(jì)模式之橋接模式(Bridge)
橋接模式屬于先天模式,這里的先天模式就是說一開始就要把結(jié)構(gòu)搭建好,方便后來的擴(kuò)展,而不是對(duì)已經(jīng)出現(xiàn)的模塊和接口進(jìn)行改進(jìn)擴(kuò)展的。橋接的核心在于實(shí)體類和操作類之間的聚合關(guān)系,這個(gè)聚合關(guān)系就是我們所說的"橋",不同于裝飾、代理和適配器模式的中的聚合關(guān)系,橋接不存在兩者之間的繼承關(guān)系,操作類是完全解耦的,而實(shí)體類對(duì)于操作類也只是弱耦合。
作用
將抽象部份與它的實(shí)現(xiàn)部份分離,使它們都可以獨(dú)立地變化。
類視圖

實(shí)現(xiàn)
//操作類
class action
{
public:
virtual void do()=0;
};
class write : public action
{
public:
void do(){ count << "to write\n";}
};
class draw : public action
{
public:
void do() { count << "to draw\n";}
};
class gift : public action
{
public:
void do {count << "to gift\n";}
};
//實(shí)體類
class pen
{
public:
pen(): m_pAction(NULL){}
virtual ~pen(){ delete m_pAction;}
virtual void use();
void setaction(action* pAction){m_pAction = pAction;}
protected:
action* m_pAction;
};
class pencil : public pen
{
void use()
{
cout << "use pencil ";
m_pAction.do();
}
};
class brush : public pen
{
void use()
{
cout << "use brush ";
m_pAction.do();
}
};
class goldenpen : public pen
{
void use()
{
cout << "use goldenpen ";
m_pAction.do();
}
};
int main
{
ballpen inHand;
inHand.setaction(new gift());
inHand.use();
}

上面例子簡(jiǎn)單的說明了實(shí)體類pen和操作類action之間的橋接關(guān)系,如果需要擴(kuò)展的情況下,我們可以分別對(duì)pen和action進(jìn)行繼承擴(kuò)展,不會(huì)牽扯到另外一邊的改動(dòng)。比如我們?cè)贁U(kuò)展一種筆或者一種筆的用法,直接擴(kuò)展筆的種類或者用法的種類即可,這樣就達(dá)到了低耦合易擴(kuò)展的目的。
應(yīng)用場(chǎng)景
- 當(dāng)對(duì)象存在多種變化的因素時(shí),考慮對(duì)其變化的因素和場(chǎng)景進(jìn)行抽象,然后進(jìn)行橋接;如筆擁有不同的功能。
- 當(dāng)多個(gè)對(duì)象存在多種變化的因素時(shí),考慮將這部分變化的部分抽象出來再聚合進(jìn)來;比如不同品牌的電腦安裝不同的系統(tǒng)、使用不同的軟件等,相當(dāng)于將第一條進(jìn)行橫向擴(kuò)展,增加橋接的數(shù)量。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
養(yǎng)成良好的C++編程習(xí)慣之內(nèi)存管理的應(yīng)用詳解
"養(yǎng)成良好的編程習(xí)慣"其實(shí)是相當(dāng)綜合的一個(gè)命題,可以從多個(gè)角度、維度和層次進(jìn)行論述和評(píng)判,如代碼的風(fēng)格、效率和可讀性;模塊設(shè)計(jì)的靈活性、可擴(kuò)展性和耦合度等等,要試圖把所有方面都闡述清楚必須花很多的精力,而且也不一定能闡述得全面2013-05-05
C++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)
下面小編就為大家?guī)硪黄狢++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
關(guān)于統(tǒng)計(jì)數(shù)字問題的算法
本文介紹了統(tǒng)計(jì)數(shù)字問題的算法,計(jì)算出書的全部頁(yè)碼中分別用到多少次數(shù)字0,1,2,3,.....9,并有每一步的解題思路,需要的朋友可以參考下2015-08-08
C語言中的abs()函數(shù)和exp()函數(shù)的用法
這篇文章主要介紹了C語言中的abs()函數(shù)和exp()函數(shù)的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08
C語言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
詳解C語言中fseek函數(shù)和ftell函數(shù)的使用方法
這篇文章主要介紹了C語言中fseek函數(shù)和ftell函數(shù)的使用方法,兩個(gè)函數(shù)分別用于設(shè)置和返回文件指針stream的位置,需要的朋友可以參考下2016-03-03
C語言typedef與復(fù)雜函數(shù)聲明問題的深入解析
以下是對(duì)C語言中的typedef與復(fù)雜函數(shù)聲明問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-07-07

