思考适配器模式
适配器模式通过转换已有的接口,达成目标需要的接口
适配器模式还可以将多种差异化接口适配成同一接口做统一输出
1.适配器模式的本质
适配器模式的本质是:转换匹配,复用功能。
适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。也就是说转换匹配是手段,而复用已有的功能才是目的。
在进行转换匹配的过程中,适配器还可以在转换调用的前后实现一些功能处理,也就是实现智能的适配。
2.何时选用适配器模式
建议在以下情况中选用适配器模式。
-
如果你想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口。
-
如果你想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时候需要什么就适配什么。
-
如果你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,直接适配这些子类的父类就可以了。
3.实现
对象适配
模拟实现完第一版功能,又完成了第二版功能,想兼容第一版功能
/**
* @description:被适配类
*/
public class Adaptee {
public void first(){
System.out.println("第一版功能--------------");
}
}
/**
* @description:要适配成的目标类
*/
public interface Target {
/**
* 第二版功能
*/
void second();
}
/**
* @description:适配器
*/
public class ObjectAdapter implements Target{
@Autowired
private Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void second() {
//实际调用第一版功能
adaptee.first();
}
}
测试
public class Client {
public static void main(String[] args) {
Target adapter = new ObjectAdapter(new Adaptee());
//调用第二版功能
adapter.second();
}
}
类图
接口适配
修改适配器类
/**
* @description:适配器
*/
public class ObjectAdapter extends Adaptee implements Target{
@Override
public void second() {
//实际调用第一版功能
super.first();
}
}
测试
public class Client {
public static void main(String[] args) {
Target adapter = new ObjectAdapter();
//调用第二版功能
adapter.second();
}
}