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();
- }
作者微信:
时间: 2024-11-09 01:55:10