意图
把一个类接口转换成另一个用户需要的接口。
类图
适配器模式分为对象适配器和类适配器:对象适配器使用组合,类适配器使用多重继承(Java 中可通过实现接口 + 继承实现类模拟)。本文以下实现的是对象适配器。
classDiagram
class Duck {
<<interface>>
+quack() void
}
class Turkey {
<<interface>>
+gobble() void
}
class WildTurkey {
+gobble() void
}
class TurkeyAdapter {
-turkey Turkey
+quack() void
}
class Client
Duck <|.. TurkeyAdapter
Turkey <|.. WildTurkey
TurkeyAdapter o-- Turkey : 组合被适配者
Client ..> Duck
实现
鸭子(Duck)和火鸡(Turkey)拥有不同的叫声:Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子!
public interface Duck {
void quack();
}
public interface Turkey {
void gobble();
}
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("gobble!");
}
}
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
}
public class Client {
public static void main(String[] args) {
Turkey turkey = new WildTurkey();
Duck duck = new TurkeyAdapter(turkey);
duck.quack();
}
}
JDK 中的应用
java.util.Arrays#asList()java.util.Collections#list()java.util.Collections#enumeration()javax.xml.bind.annotation.adapters.XMLAdapter- Spring MVC 的
HandlerAdapter(根据处理器类型适配不同的调用方式)
系列导航
- 上一篇:单例模式(Singleton)
- 下一篇:桥接(Bridge)
- 结构型模式开始:装饰(Decorator) · 外观(Facade)