适配器模式
1.定义
将一个类的接口改变成客户端所期待的另一种接口,从而使因为接口不匹配而不能在一起工作的两个类能够协同工作。
适配器模式通常有四种角色。
AbstractTarget:抽象目标角色。定义将其它类转换为什么接口。
public interface AbstractTarget {
void request();
}
Target:目标角色。抽象目标角色的具体实现。
public class Target implements AbstractTarget {
@Override
public void request() {
System.out.println("this is target!");
}
}
Adaptee:源角色。即将被转换的角色。
public interface AbstractAdaptee {
void doSomething();
}
public class Adaptee implements AbstractAdaptee {
@Override
public void doSomething() {
System.out.println("This is adaptee!");
}
}
Adapter:适配器角色。核心角色,将源角色转换为目标角色。
public class Adapter extends Adaptee implements AbstractTarget {
@Override
public void request() {
super.doSomething();
}
}
场景类
public class Client {
public static void main(String[] args) {
// 原目标角色
AbstractTarget targetOne = new Target();
targetOne.request();
// 增加适配器
AbstractTarget targetTwo = new Adapter();
targetTwo.request();
}
}
2.应用
2.1 优点
- 可以把两个毫无关系的两个类在一起运行,只需要完成它们之间的适配器即可。
- 将目标角色的实现都委托为源角色,对高层模块来说是透明的,且不需要关心。
- 提高了类的复用度。原角色在原系统及新系统中都可以继续使用。
2.3 使用场景
接口扩展,使用一个已有或新建且不符合系统原有设计的类修改一个已经投产的接口。
2.4 注意事项
在系统详细设计阶段尽量不要考虑适配器模式。适配器模式是为了解决正在投产的项目问题而不是还处于开发阶段的项目问题。