定义
在程序的世界中,经常会存在现有的程序无法直接使用,需要做适当的变换后才能使用的情况。这种用于填补“现有程序”和“所需程序”之间差异的设计模式就是适配器模式;
以个人的角度简单来说 :就是一个类中的方法,通过其他类中的方法进行调用;
主要角色
Target(对象)
负责定义所需的方法,即适配器中的方法
Client(请求者)
该角色负责使用Target角色所定义的方法进行具体处理
Adaptee(被适配)
这是一个被适配的角色,持有既定方法的角色
Adapter(适配)
Adapter 模式的主人公,使用 Adapter 角色方法,来满足 Target 角色的需求,这就是 Adapter 模式的目的
代码实例
类适配器模式
Target 对象
public interface Print {
void printWeek();
void printStrong();
}
Adaptee 被适配对象
public class Banner {
public void showWithParen() {
System.out.println(1);
}
public void showWithAster() {
System.out.println(2);
}
}
Adapter 适配对象
public class PrintBanner extends Banner implements Print{
@Override
public void printWeek() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
对象适配器模式
Target 对象
public class Print {
public void printWeek() {
}
public void printStrong() {
}
}
Adaptee 被适配对象
public class Banner {
public void showWithParen() {
System.out.println(1);
}
public void showWithAster() {
System.out.println(2);
}
}
Adapter 适配对象
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner() {
this.banner = new Banner();
}
@Override
public void printStrong() {
banner.showWithAster();
}
@Override
public void printWeek() {
banner.showWithParen();
}
}
作用
- 组件复用
当现有的类已经被充分测试过了,bug很少,而且已经被用于其他软件中时,我们更愿意将这些类作为组件来复用
- 版本迭代
让新版本扮演adaptee对象,旧版本扮演target对象,接着编写一个扮演adapter角色的类,让它使用新版本的类来实现旧版本的类中的方法
- 适配其他代码
可以在完全不改变现有代码的前提下使现有代码适配于新的接口