Adapter模式
适配器位于实际情况与需求之间,填补两者之间的差异。这种用于填补“现有的程序”和“所需的程序”之间的差异的设计模式就是Adapter模式。
Adapter模式有以下两种。
- 类适配器模式(使用继承)
- 对象适配器模式(使用委托)
类适配器模式
Print.java
public interface Print {
public void printWeak();
public void printStrong();
}
Banner.java
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 + "*");
}
}
PrintBanner.java
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
public void printWeak() {
showWithParen();
}
public void printStrong() {
showWithAster();
}
}
对象适配器模式
委托就是指将某个方法中的实际处理交给其他实例的方法。
Print.java
public interface Print {
public void printWeak();
public void printStrong();
}
Banner.java
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 + "*");
}
}
PrintBanner.java
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();
}
}
登场角色
Target(对象):定义所需的方法。
Client(请求者):使用Target角色所定义的方法进行具体的处理。
Adaptee(被适配):持有既定方法的角色。
Adapter(适配):使用Adaptee角色中的方法来满则Target角色的需求。
使用继承
使用委托
要点思考
开发中我们经常会用到现有的类,这些类已经被充分测试过,所以我们更愿意将这些类作为组件重复利用。Adapter模式对象有的类适配,生成新的类,通过该模式可以很方便地创建我们需要的方法群。
Adapter模式同样可以用于新旧版本兼容,由新版本充当Adaptee角色,旧版本扮演Targer角色,之后编写一个扮演Adapter角色的类,让它使用新版本的类来实现旧版本的类中的方法。
示例代码出自《图解设计模式》 结城浩