Adapter模式
来源:互联网 发布:ios11.2 软件打不开 编辑:程序博客网 时间:2024/06/15 03:59
意图:
将一个类的接口转换成客户希望的另外一个接口,Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。
实例:
假设现在有一个图形绘制程序,有绘制与填充函数,此时定义一个公有的虚基类shape,并添加虚函数display与fill,当我要绘制正方形,从shape类派生出square类,要绘制线,从shape类中派生出line类。假设又要添加一个绘制圆的需求,我可以像前面一样继续派生出一个圆的类,但是此时有一个人已经写好了处理圆的这些操作的类,假设叫XXCircle类,但是它的命名方法跟我shape类中的这些命名方法不同。我不能直接使用XXCircle类,因为我想保持Shape类的多态行为,原因如下 1)因为XXCircle类中的方法,参数列表都不同 2)我不能直接派生XXCircle,因为它还必须从Shape派生。 我也不能直接修改XXCircle类,因为其他地方可能正在用这个类,这样要修改的地方太多。 这时候就体现出Adapter模式的用途了。
根据上面的需求,c++代码描述如下:
#include<iostream>#include<list>using namespace std;class Shape{public:Shape() {}~Shape() {}virtual void dispaly() = 0;virtual void fill() = 0;};class Square :public Shape{public:Square() {}~Square() {}void dispaly(){cout << "正方形的显示" << endl;}void fill(){cout << "正方形的填充" << endl;}};class Line :public Shape{public:Line() {}~Line() {}void dispaly(){cout << "线的显示" << endl;}void fill(){cout << "线的填充" << endl;}};class XXCircle{public:XXCircle() {}~XXCircle() {}void drawCircle(){cout << "XXCircle类圆的绘制方法" << endl;}void fillCircle(){cout<< "XXCircle类圆的填充方法" << endl;}};class Circle :public Shape{public:void dispaly(){myXXCircle.drawCircle();}void fill(){myXXCircle.fillCircle();}private:XXCircle myXXCircle;};int main(){Square *squ = new Square;Line *line = new Line;Circle *cir = new Circle;list<Shape*>shapeList;shapeList.push_back(squ);shapeList.push_back(line);shapeList.push_back(cir);for (auto p : shapeList){p->dispaly();p->fill();cout << endl;}system("pause");}执行结果如下
效果:使原有对象能够适应新的结构,不受接口的限制。
实现:将原有类包含在另一个类之中。让包含类与需要的接口匹配,调用被包容类的方法。
阅读全文
0 0
- Adapter 模式 - Object Adapter
- Adapter 模式 - Class Adapter
- Adapter 模式 - Object Adapter
- Adapter 模式 - Class Adapter
- Adapter模式
- Adapter模式
- Adapter模式
- Adapter模式
- adapter模式
- Adapter模式
- Adapter模式
- Adapter 模式
- Adapter模式
- adapter模式
- Adapter模式
- Adapter模式
- Adapter模式
- Adapter模式
- 动态代理与AOP(3)
- 纠结了好久的递归
- win10 eclipse jdk1.7配置Hanlp
- spring boot 集成Async 注解 异步处理
- netty4.x初试,简单的通讯
- Adapter模式
- C/C++调用lua的table,table包含函数,table和变量
- 浏览器访问sp页面出现文件下载的情况
- node
- 怎么在官网上下载java连接mysql的驱动jar包?
- Python翻转字符串(reverse string)详解
- 58
- <C++ Primer_5th>习题_1.9
- CentOS7安装spark集群