所谓的适配器模式,实现了 “ 目标接口 ” 到 “ 现有接口 ” 的转换,即:将一个现有类的接口转换成客户希望的另一个接口,使得那些原本由于接口不兼容而不能一起工作的类可以一起工作。
当用户所需要的 “目标接口” 和 “现有接口” 出现不一致的情况,在不改变两种接口前提下,需要使用 “适配器模式”,实现对现有接口的充分利用。
一,适配器模式的结构图
适配器模式分为两种类型,分别是 “类适配器模式” 和 “对象适配器模式”。
“类适配器模式” 结构图:
“对象适配器模式” 结构图:
实际使用中较常见的是“对象适配器模式”
以上两图中
Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。
Adapter(适配器类):在内部包装一个Adaptee对象或者实现Target接口,把源接口转换成目标接口。它是适配器模式的核心。
Adaptee(被适配者类):适配者即被适配的角色,它代表一个已经存在的接口,这个接口需要适配成客户所希望的业务接口。
二,适配器模式的代码实现(Java)
1,类适配器
class Adapter extends Adaptee implement Target
{
public void Request()
{
base.SpecificRequest();
}
}
2, 对象适配器
class Adapter extends Target
{
private Adaptee adaptee; //维持一个对适配者对象的引用
public Adapter(Adaptee adaptee)
{
this.adaptee = adaptee;
}
public void Request()
{
adaptee.SpecificRequest();//转发调用
}
}
适配器模式的优点:
适配器模式主要是为了解决两个已有接口之间不匹配的问题,它不需要考虑这些接口是怎样实现的,也不用考虑它们各自可能会如何演化。该模式不需要对两个独立设计的类中任一个进行重新设计,就能够使它们协同工作。