适配器模式
- 适配器模式的定义
- 将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
- 应用适配器来解决问题的思路
- 问题的根源在于接口的不兼容,功能是已经实现了的,那么也就是说只要想办法让两边的接口匹配起来,就可以复用第一版的功能了
- 定义一个类,来实现第二版的接口,然后在内部实现的时候,调转第一版已经实现了的功能,这样就可以通过对象组合的方式,既复用了第一版已经实现了的功能,同时又在接口上满足了第二版调用的要求
- Client:客户端,调用自己需要的领域接口target
- Target:定义客户端需要的跟特定领域相关的接口
- Adaptee:已经存在的接口,通常能满足客户端的要求,但是接口与客户端要求的特定领域接口不一致,需要被适配
- Adapter:适配器,把Adaptee适配成为Client需要的target
public interface Target {
public void request();
}
public class Adaptee implements Target {
public void specificRequest() {
}
}
public class Adapter {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.request();
}
}
- 适配器模式的功能:进行转换匹配,复用已有的功能
- Adaptee和Target的关系:
- 适配器模式中被适配的接口Adaptee和适配器成为的接口Target是没有关联的,也就是说两者中的方法可以相同,也可以不同
- 对象组合
- 适配器的实现方式是依靠对象组合的方式。通过给适配器对象组合被适配的对象,然后客户端调用Target的时候,适配器会把相应的功能委托给被适配的对象去完成
- 适配器模式的优点
- 适配器的缺点
- 过多的使用适配器会使系统非常凌乱,不容易整体进行把握
- 适配器的本质就是:转换匹配,复用功能
- 何时使用适配器?
- 想要使用一个已存在的类,但是它的接口不符合你的需求
- 想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作
- 使用一些已经存在的类,但是不可能对每一个子类都进行适配