<设计模式>一书中的描述
"将一个类的接口转换成客户希望的另一个接口,Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作"
简单的说,就是利用现有的接口去包装一个第三方的接口, 使其能象现有接口一样被程序调用,而不考虑实际使用类的差异
举例:
当前系统有一个绘图接口 IDraw , 其中定义了display()方法,用来显示一个
现在同事A,给我一套新的绘图类,但是这个类却使用了show()方法来显示一个图形
我不能修改这个新接口,因为他被编译了,如果直接使用此接口,我不得不修改主程序以适应这个接口,这是一个繁重的工作
但是,使用Adapter模式,可以根据IDraw接口来创建一个"适配器"
class MyDraw implements IDraw{
OtherDraw otherDraw = new OtherDraw();
public void display(){
otherDraw.show();
}
}
现在我们可以调用MyDraw的display()方法来显示图形了,主程序不会意识到下端子系统的变化
Adapter模式与Facade模式很相象
他们都封装了原有的接口
他们之间的区别在于
Facade模式不按照某个接口设计 Adapter模式必须按照某个类设计
Facade一般不需要多态行为 Adapter模式大多可能是为了现有的多态行为而使用的
Facade是为了简化原有的复杂接口 Adapter必须遵循一个已有的接口,不能简化任何东西,即使可能存在更简单的接口
参考书籍:设计模式解析