Adapter模式
应用场景
- 系统需要使用现有的类,而此类的接口不符合 系统的需要。
- 想要建立一个有以重复使用的类,该类可能与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
- (对对象适配器而言)在设计里,你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配。对象适配器可以适配它你的父类接口 (使用的扩展) 。
本质
优点
- 更好的复用性
- 更好的可扩展性
在实现适配器功能的时候, 可以调用自己开发的功能,从而自然地扩展系统的功能
缺点
- 过多地使用适配器,会让系统非常凌乱,不容易整体进行把握。
角色
- 目标(Target) 角色:
这是客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 - 源(Adaptee)角色:
需要适配的类。 - 适配器(Adapter) 角色:
通过在内部包装(Wrap)一个Adaptee对象,把源接口转换成目标接口。
设计模式的类图
示例程序
示例程序的类图
示例代码
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner(String string) {
this.banner = new Banner(string);
}
public void printWeak() {
banner.showWithParen();
}
public void printStrong() {
banner.showWithAster();
}
}
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
拓展思路
- 让现有的类适配新的接口API时,使用适配器模式是理所当然的。
- 使用适配器模式可以在完全不改变现有代码的前提下使现有代码适配于新的接口API。
相关设计模式
- Bridge模式
Adapter模式用于连接接口(API)不同的类,而Bridge模式则用于连接类的功能层次结构与实现层次结构。 - Decorator模式
Adapter模式用于填补不同接口( API )之间的缝隙,而Decorator模式则是在不改变接口( API )的前提下增加功能。
满足的原则