类图
定义
将一个类的接口变换成客户端期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作
优点
- 适配器角色可以让两个没有任何关系的类在一起运行
- 增加了类的透明性, target 目标角色具体实现委托给了源角色,这对高层模式是透明的
- 提高了类的复用度,源角色在原有系统中还是可以正常使用
- 灵活性非常好 适配器类似于一个灵活的构件,随时可以卸载
使用场景
在开发阶段不用考虑它,主要是在扩展应用中
扩展
对象适配器类图如上图所示,它与类适配器的区别是:类适配器是类间继承,对象适配器是对象间的合成 ( 关联 ) 关系。适配器模式是一个补偿模式,通常用来解决接口不相容的问题
目标角色
public interface Target {
// 目标角色有自己的方法
void request();
}
目标角色实现类
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("目标角色 doSomething");
}
}
原角色
public class Adaptee {
// 原有的业务逻辑
public void doSomething() {
System.out.println("原角色 doSomething");
}
}
适配器角色
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.doSomething();
}
}
场景类
public class Client {
public static void main(String[] args) {
// 原有的业务逻辑
Target target1 = new ConcreteTarget();
// 目标角色执行方法
target1.request();
// 增加了适配器角色后的业务逻辑
Target target2 = new Adapter();
// 目标角色执行方法,但是实际执行的是原角色的方法
target2.request();
//Adapter把Adaptee变成了Target,并且保持了原始的业务逻辑
}
}
运行结果
目标角色 doSomething
原角色 doSomething