适配器模式的定义
适配器模式(Adaptor Pattern)的定义如下:
Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. 即:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法工作在一起的两个类一起工作。适配器在生活中很常见,其通用类图如下:

适配器模式主要包含以下三种角色:
- Target目标角色。该角色定义将其他类或接口转换成何种接口,也就是我们期望的接口。
- Adaptee源角色。该角色为被改造对象,即需要被转换成特定接口的类。
- Adaptor适配器角色。适配器模式的核心角色,适配器类的职责非常简单:通过集成或者类关联的方法,把源角色转换成目标角色。
适配器模式的通用代码如下:
//目标角色
public interface Target{
//目标角色的方法
public void request();
}
public class ConcreteTarget implements Target{
@Override
public void request() {
System.out.println("Target request...");
}
}
//源角色
public class Adaptee{
//原有的业务逻辑
public void doSomething(){
System.out.println("Adaptee do something...");
}
}
//适配器角色
public class Adapter extends Adaptee implements Target{
@Override
public void request() {
super.doSomething();
System.out.println("then do Target request...");
}
}
//客户端角色
public class AdapterClient{
public static void main(String[] args) {
//原有业务逻辑
Target target1 = new ConcreteTarget();
target1.request();
System.out.println("---------------");
Target target2 = new Adapter();
target2.request();
}
}
该通用代码的运行结果如下:
Target request...
---------------
Adaptee do something...
then do Target request...
适配器模式的应用
适配器模式的优点
- 适配器模式可以让两个没有关系的类运行在一起,只要适配器这个角色能够搞定他们即可。
- 增加了类的透明性。高层模块只需要访问Target目标角色的接口,而不用关心被委托的源角色是如何具体实现的。
- 提高了类的复用度。
- 灵活性非常好。
适配器模式的适用场景
适配器模式的应用场景基本上为:有目的地去修改一个已经存在的接口。
适配器模式的注意事项
适配器模式最好在详细设计阶段不要考虑它,它并不是为了解决一个还在设计阶段的问题,只有当系统扩展了,不符合原有设计的情况下,才考虑使用适配器模式减少代码修改带来的风险。
《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记。
网友评论