您好,登錄后才能下訂單哦!
本篇內容介紹了“c++橋接模式怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
c++涉及模式 橋接模式(bridge Pattern)
考慮這樣一個問題:
需要獲得一個圖形,這個圖形可以是圓形,可以是正方形,可以使長方形其顏色可以是藍色可以是紅色可以是綠色,如果這種情況下將設計寫死,那么可以
看到有3*3=9 個類,但是圖形和顏色更多呢?那么成為一個基本不能完成的任務,那么在這種情況下我們就需一種叫做橋接的設計模式,它的原理同樣是
通過虛函數進行解耦合,實現方式 圖形抽象類通過一個輸入顏色抽象類的指針(依賴)來代表顏色,然后通過保存在一個聚合的顏色抽象類指針成員中,這里
通過這兩圖形抽象類和顏色抽象類進行解耦合,同時能夠實現任何顏色和任何圖形之間的組合,也是非常神奇的一種設計模式
下面是模式圖:
下面是上面問題的代碼實現:
輸出為:
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; //聚合 橋接
};
//顏色具體實現
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(){};
};
//形狀具體實現并且橋接到顏色
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++橋接模式怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。