c++涉及模式 橋接模式(bridge Pattern)
c++涉及模式 橋接模式(bridge Pattern)
考慮這樣一個問題:
需要獲得一個圖形,這個圖形可以是圓形,可以是正方形,可以使長方形其顏色可以是藍色可以是紅色可以是綠色,如果這種情況下將設計寫死,那麼可以
看到有3*3=9 個類,但是圖形和顏色更多呢?那麼成為一個基本不能完成的任務,那麼在這種情況下我們就需一種叫做橋接的設計模式,它的原理同樣是
透過虛擬函式進行解耦合,實現方式 圖形抽象類透過一個輸入顏色抽象類的指標(依賴)來代表顏色,然後透過儲存在一個聚合的顏色抽象類指標成員中,這裡
透過這兩圖形抽象類和顏色抽象類進行解耦合,同時能夠實現任何顏色和任何圖形之間的組合,也是非常神奇的一種設計模式
下面是模式圖:
下面是上面問題的程式碼實現:
輸出為:
程式碼:
考慮這樣一個問題:
需要獲得一個圖形,這個圖形可以是圓形,可以是正方形,可以使長方形其顏色可以是藍色可以是紅色可以是綠色,如果這種情況下將設計寫死,那麼可以
看到有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();
- }
作者微信:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2137443/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- Java橋模式(Bridge模式)Java模式
- (精華)2020年8月28日 二十三種設計模式(七)-橋接模式(Bridge Pattern)設計模式橋接
- 設計模式 - Bridge 橋模式設計模式
- 橋接模式(c++實現)橋接模式C++
- 2.2 橋接 Bridge橋接
- 設計模式-橋接模式設計模式橋接
- 設計模式之【橋接模式】設計模式橋接
- Java設計模式-橋接模式Java設計模式橋接
- 結構型模式:橋接模式模式橋接
- 設計模式(八)——橋接模式設計模式橋接
- 設計模式之橋接模式設計模式橋接
- 小白設計模式:橋接模式設計模式橋接
- 08_橋接模式橋接模式
- 極簡設計模式-橋接模式設計模式橋接
- GoLang設計模式19 - 橋接模式Golang設計模式橋接
- 9.設計模式-橋接模式設計模式橋接
- PHP 設計模式之橋接模式PHP設計模式橋接
- Java設計模式(7)----------橋接模式Java設計模式橋接
- C++設計模式——命令模式(command pattern)C++設計模式
- 設計模式學習-裝飾模式,橋接模式設計模式橋接
- Java設計模式之(六)——橋接模式Java設計模式橋接
- 設計模式之旅12--橋接模式設計模式橋接
- 設計模式(七)橋接設計模式橋接
- 設計模式之橋接設計模式橋接
- 設計模式(十三)----結構型模式之橋接模式設計模式橋接
- 設計模式:橋接模式及程式碼示例、橋接模式在jdbc中的體現、注意事項設計模式橋接JDBC
- c#橋接模式詳解C#橋接模式
- 跟著GPT學設計模式之橋接模式GPT設計模式橋接
- C++設計模式——職責鏈模式( Chain of Responsibility Pattern)C++設計模式AI
- 10.橋接模式設計思想橋接模式
- java 橋接模式實現程式碼Java橋接模式
- 將Vmware中配置成橋接模式橋接模式
- 設計模式學習-使用go實現橋接模式設計模式Go橋接
- 從零開始學設計模式(七)—橋接模式設計模式橋接
- 設計模式 第七章 橋接模式、裝飾者模式、組合模式設計模式橋接
- 設計模式系列之代理模式(Proxy Pattern)——物件的間接訪問設計模式物件