适配器模式

当我们去国外旅行时,我们国内的插头不能直接插入到国外的插线板上,我们需要购买一个电源适配器来适配国外的插线板。

或者最新版的macbook pro 用的是utypec,并不能直接插入usb3.0的u盘,我们需要购买一个适配器做转换。

定义

将一个类的接口编程客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式通用类图

实现

Target

目标角色是一个接口或者抽象类,是一个已经存在的角色,不可能去修改角色中的方法。

1
2
3
public interface Target{
public void request();
}

ConcreteTarget

具体的目标角色实现类。

1
2
3
4
5
public class ConcreteTarget implements Target{
public void request(){
//...
}
}

Adaptee

源角色,已经使用中的角色。需要将Adaptee转换为Target。

1
2
3
4
5
public class Adaptee{
public void doSomething(){
//...
}
}

Adaptor

适配器角色。

1
2
3
4
5
public class Adaptor extends Adaptee implements Target{
public void request(){
super.doSomething();
}
}

Use

1
2
3
4
5
6

Target target = new ConcreteTarget();
target.request();

Target target2 = new Adaptor();
target2.request();

扩展

当需要把多个Adaptee转换为Target的时候,就不能使用继承了,因为Java中不支持多继承。
这种方式叫做对象适配器。
我们可以使用聚合(关联)来完成适配。

对象适配器类图

类适配器是由类的继承关系完成的。
对象适配器是由类的关联关系纪念性耦合。