Adapter
目的
将一个类的接口转换成client希望使用的另外一个接口。通过Adapter模式,两个接口不兼容的类得以协同工作。
动机
假如有一个绘图编辑器,它通过一堆图形对象为客户所操作,而这些图形对象的接口由一个Shape的抽象类定义。当我们希望使用textshape这一个子类来编辑显示正文时,难以实现,因为其涉及到了诸如缓冲刷新的问题。而此时工具包中已经提供了一个textview的类拥有这个功能,但当时工具的设计者没有提供到互相兼容的接口。
因此为了解决这个问题,我们可以使用adapter模式来使其兼容。
使用范围
- 希望使用一个已经存在的类;
- 希望创建一个可以复用的类,但该类可以与其它不相干(接口不兼容)的类协同工作;
- (仅仅适用于对象adapter)希望使用已经存在的子类,但又不希望对每一个子类匹配接口。可以使用对象adapter;
效果
针对类adapter和对象adapter,会产生不同的效果
类adapter
- 一般情况下,将adapter公共继承target,私有继承adaptee,这样就可以部分重定义adaptee的行为,也不需要额外的指针去指向adaptee
对象adapter
- 允许一个adapter和多个adaptee交互同时工作,只需要在adapter类内存有相关指针变量即可;
- 但这种方法难以重定义adaptee;
代码实例
1 | // Adapter.cpp : 定义控制台应用程序的入口点。 |