本篇内容介绍了“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++桥接模式怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!