您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“c++橋接模式怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
c++涉及模式 橋接模式(bridge Pattern)
考慮這樣一個(gè)問題:
需要獲得一個(gè)圖形,這個(gè)圖形可以是圓形,可以是正方形,可以使長方形其顏色可以是藍(lán)色可以是紅色可以是綠色,如果這種情況下將設(shè)計(jì)寫死,那么可以
看到有3*3=9 個(gè)類,但是圖形和顏色更多呢?那么成為一個(gè)基本不能完成的任務(wù),那么在這種情況下我們就需一種叫做橋接的設(shè)計(jì)模式,它的原理同樣是
通過虛函數(shù)進(jìn)行解耦合,實(shí)現(xiàn)方式 圖形抽象類通過一個(gè)輸入顏色抽象類的指針(依賴)來代表顏色,然后通過保存在一個(gè)聚合的顏色抽象類指針成員中,這里
通過這兩圖形抽象類和顏色抽象類進(jìn)行解耦合,同時(shí)能夠?qū)崿F(xiàn)任何顏色和任何圖形之間的組合,也是非常神奇的一種設(shè)計(jì)模式
下面是模式圖:
下面是上面問題的代碼實(shí)現(xiàn):
輸出為:
I'm bule rectangle
I'm red rectangle
I'm green square
I'm bule square
代碼:
#include<iostream>
using namespace std;
//顏色虛接口
class colour
{
public:
virtual void getcol() = 0;
virtual ~colour(){};
};
//形狀虛接口
class graph
{
public:
virtual void setcol(colour* col) = 0; //依賴 橋接
virtual ~graph(){};
protected:
colour* col; //聚合 橋接
};
//顏色具體實(shí)現(xiàn)
class red:public colour
{
public:
virtual void getcol()
{
cout<<"I'm red ";
}
virtual ~red(){};
};
class bule:public colour
{
public:
virtual void getcol()
{
cout<<"I'm bule";
}
virtual ~bule(){};
};
class green:public colour
{
public:
virtual void getcol()
{
cout<<"I'm green ";
}
virtual ~green(){};
};
//形狀具體實(shí)現(xiàn)并且橋接到顏色
class square:public graph
{
public:
square()
{
this->col = NULL ;
}
virtual void setcol(colour* col)
{
this->col = col;
}
void print()
{
this->col->getcol();
cout<<" square\n";
}
virtual ~square(){};
};
class triangle:public graph
{
public:
triangle()
{
this->col = NULL ; ;
}
virtual void setcol(colour* col)
{
this->col = col;
}
void print()
{
this->col->getcol();
cout<<" triangle\n";
}
virtual ~triangle(){};
};
class rectangle:public graph
{
public:
rectangle()
{
this->col = NULL ;
}
virtual void setcol(colour* col)
{
this->col = col;
}
void print()
{
this->col->getcol();
cout<<" rectangle\n";
}
virtual ~rectangle(){};
};
int main(void)
{
bule tblue;
red tred;
green tgreen;
rectangle trectangle;
trectangle.setcol(&tblue); //任意組合
trectangle.print();
trectangle.setcol(&tred); //任意組合
trectangle.print();
square tsquare;
tsquare.setcol(&tgreen); //任意組合
tsquare.print();
tsquare.setcol(&tblue); //任意組合
tsquare.print();
}
“c++橋接模式怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。