一. 结构图
(1)类适配器结构图(继承新接口,实现目标接口)
耦合度高,且要求了解组件的内部结构,应用较少。
(2)对象适配器结构图(组合适配者对象,实现目标接口)
二. 实现
(1)类适配器 package adapter; //目标接口 interface Target { public void request(); } //适配者接口 class Adaptee { public void specificRequest() { System.out.println("适配者中的业务代码被调用!"); } } //类适配器类 class ClassAdapter extends Adaptee implements Target { public void request() { specificRequest(); } } //客户端代码 public class ClassAdapterTest { public static void main(String[] args) { System.out.println("类适配器模式测试:"); Target target = new ClassAdapter(); target.request(); } }
(2)对象适配器 package adapter; //对象适配器类 class ObjectAdapter implements Target { private Adaptee adaptee; public ObjectAdapter(Adaptee adaptee) { this.adaptee=adaptee; } public void request() { adaptee.specificRequest(); } } //客户端代码 public class ObjectAdapterTest { public static void main(String[] args) { System.out.println("对象适配器模式测试:"); Adaptee adaptee = new Adaptee(); Target target = new ObjectAdapter(adaptee); target.request(); } }
三. 应用场景
(1)老系统存在满足功能需求的类,但接口同新系统的要求不一致。
(2)使用第三方组件,其接口定义和要求不同。
四.与代理模式区别
适配模式,解决适配者与目标接口不匹配的问题。
代理模式,会和目标对象实现相同的接口,屏蔽对目标对象的直接访问。