【C++ 設(shè)計(jì)模式】7.橋接模式

  • 橋接模式:一種結(jié)構(gòu)型設(shè)計(jì)模式

  • 應(yīng)用場景:
    一個(gè)對象由多部分屬性組成幢码,而對象與屬性之間的關(guān)系,有些為has a尖飞,有些為is a症副,為了更靈活也更合理地實(shí)現(xiàn)功能店雅,應(yīng)該根據(jù)對象的組成關(guān)系將屬性抽象
    舉例:
    紅色的圓可以繼承自圓的抽象類,而不應(yīng)繼承自紅色的抽象類瓦糕,因?yàn)榧t色對它來說是一個(gè)擁有的屬性底洗。
    而且,如果只通過圓的抽象類派生出一個(gè)紅色圓的類咕娄,后續(xù)可能需要增加綠色圓亥揖、藍(lán)色圓甚至綠色三角的類,交叉組合會(huì)產(chǎn)生非常多的類圣勒,所以這時(shí)應(yīng)該考慮通過邏輯上的關(guān)系费变,分清is a與has a,將顏色與圖形的關(guān)系抽象
  • 實(shí)現(xiàn)方式:
    首先圣贸,將顏色抽象挚歧,創(chuàng)建一個(gè)顏色的抽象類
    然后,將顏色作為圖形類的一個(gè)屬性吁峻,成為圖形抽象類中的一個(gè)成員變量
    最后滑负,相同形狀不同顏色,通過更改圖形類中的顏色變量來實(shí)現(xiàn)
  • 優(yōu)點(diǎn):
    將抽象和實(shí)現(xiàn)進(jìn)行分離用含,使抽象不用依賴于實(shí)現(xiàn)矮慕,符合依賴倒置原則,降低了耦合度
  • 缺點(diǎn):
    需要在程序設(shè)計(jì)之初就進(jìn)行抽象與分離

以下是橋接模式的簡單代碼實(shí)現(xiàn)
#include <iostream>
using namespace std;
//顏色抽象類
class Color
{
public:
    virtual string GetColor()=0;//獲取顏色啄骇,用于驗(yàn)證
};

//顏色實(shí)現(xiàn)類
class Red:public Color
{
public:
    virtual string GetColor()//獲取顏色痴鳄,用于驗(yàn)證
    {
        return "Red";
    }
};

class Blue:public Color
{
public:
    virtual string GetColor()//獲取顏色,用于驗(yàn)證
    {
        return "Blue";
    }
};

class Green:public Color
{
public:
    virtual string GetColor()//獲取顏色缸夹,用于驗(yàn)證
    {
        return "Green";
    }
};

//形狀抽象類
class Shape
{
public:
    Shape(Color* pColor):m_pColor(pColor){}
    virtual void Show()=0;//展示接口痪寻,驗(yàn)證實(shí)現(xiàn)類中顏色與形狀
protected:
    Color* m_pColor;//將圖形的顏色抽象,與形狀類橋接
};

//形狀實(shí)現(xiàn)類
class Circle:public Shape
{
public:
    Circle(Color* pColor):Shape(pColor){}//構(gòu)造圓形時(shí)指定顏色
    void Show()//重寫展示接口虽惭,用于驗(yàn)證
    {
        cout << m_pColor->GetColor() << "Circle" << endl;
    }
};

class Rectangle:public Shape
{
public:
    Rectangle(Color* pColor):Shape(pColor){}//構(gòu)造矩形時(shí)指定顏色
    void Show()//重寫展示接口橡类,用于驗(yàn)證
    {
        cout << m_pColor->GetColor() << "Rectangle" << endl;
    }
};

class Triangle:public Shape
{
public:
    Triangle(Color* pColor):Shape(pColor){}//構(gòu)造三角形時(shí)指定顏色
    void Show()//重寫展示接口,用于驗(yàn)證
    {
        cout << m_pColor->GetColor() << "Triangle" << endl;
    }
};
主函數(shù)中的使用
#include <iostream>
#include "bridge.h"
using namespace std;
int main()
{
    Shape* pBlueCircle = new Circle(new Blue());
    pBlueCircle->Show();
    return 0;
}
控制臺輸出結(jié)果
BlueCircle

如有錯(cuò)誤芽唇,歡迎指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猫态,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子披摄,更是在濱河造成了極大的恐慌,老刑警劉巖勇凭,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疚膊,死亡現(xiàn)場離奇詭異,居然都是意外死亡虾标,警方通過查閱死者的電腦和手機(jī)寓盗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傀蚌,你說我怎么就攤上這事基显。” “怎么了善炫?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵撩幽,是天一觀的道長。 經(jīng)常有香客問我箩艺,道長窜醉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任艺谆,我火速辦了婚禮榨惰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘静汤。我一直安慰自己琅催,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布虫给。 她就那樣靜靜地躺著藤抡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狰右。 梳的紋絲不亂的頭發(fā)上杰捂,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音棋蚌,去河邊找鬼嫁佳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谷暮,可吹牛的內(nèi)容都是我干的蒿往。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼湿弦,長吁一口氣:“原來是場噩夢啊……” “哼瓤漏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颊埃,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔬充,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后班利,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饥漫,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年罗标,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庸队。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片积蜻。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彻消,靈堂內(nèi)的尸體忽然破棺而出竿拆,到底是詐尸還是另有隱情,我是刑警寧澤宾尚,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布丙笋,位于F島的核電站,受9級特大地震影響央勒,放射性物質(zhì)發(fā)生泄漏不见。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一崔步、第九天 我趴在偏房一處隱蔽的房頂上張望稳吮。 院中可真熱鬧,春花似錦井濒、人聲如沸灶似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酪惭。三九已至,卻和暖如春者甲,著一層夾襖步出監(jiān)牢的瞬間春感,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工虏缸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲫懒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓刽辙,卻偏偏與公主長得像窥岩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子宰缤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,105評論 1 32
  • 一颂翼、應(yīng)用場景 設(shè)想如果要繪制矩形、圓形慨灭、橢圓朦乏、正方形,我們至少需要4個(gè)形狀類氧骤,但是如果繪制的圖形需要具有不同的顏色...
    QuantRuu閱讀 784評論 0 51
  • auto-vue-file auto create .vue file by shell command通過終端自...
    安石0閱讀 688評論 0 0
  • 楚清在學(xué)校里成天獨(dú)自一人呻疹,她仿佛在以上帝的視角觀望著這個(gè)世界、這個(gè)學(xué)校语淘,這似乎是一種神奇的感受诲宇,但同時(shí)也有一種與世...
    野興閱讀 501評論 0 1
  • 不瞞你說。 我媽在家已經(jīng)喜怒無常咆哮半年了惶翻。她作為一個(gè)農(nóng)村出身的城市人姑蓝,念過書,也在世界500強(qiáng)某銀行上班幾十余年...
    澄澄黃閱讀 1,182評論 10 8