一、定义
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作。
角色:
Target目标角色:该角色定义把其他类转换为何种接口,也就是我们期望的接口。
Adaptee源角色:想要转换为目标角色的角色。已经存在的运行良好的类,经过适配器角色包装成为目标角色。
Adapter适配器角色:核心角色,其他两个角色都是已经存在的角色,把源角色转换为目标角色,通过继承或者类关联的方式。
二、类型
接口型
三、适用场景
有动机修改一个已经投产中的接口,在设计阶段不应该考虑适配器模式。
四、优点
- 让两个没有任何关系的类在一起运行,只要适配器这个角色能搞定即可。
- 我们访问目标角色,具体实现都委托给了源角色,而这些对高层模块是透明的,也是他不需要关心的。
- 提高类的复用度。
- 灵活性好,不想要了直接删除。
五、缺点
增加系统复杂性
六、类图
类适配器:
对象适配器:
七、代码实现
Target:
package com.wms.structural.adapter.classadapter; public interface Target { void method(); }
ConcreateTarget:
package com.wms.structural.adapter.classadapter; public class ConcreateTarget implements Target { public void method() { System.out.println("concreateTarget method"); } }
Adaptee(可以定义为接口):
package com.wms.structural.adapter.classadapter; public class Adaptee { public void adapteeMethod() { System.out.println("adaptee method"); } }
类适配器:
package com.wms.structural.adapter.classadapter; public class ClassAdapter extends Adaptee implements Target { public void method() { this.adapteeMethod(); } }
对象适配器:
package com.wms.structural.adapter; public class ObjectAdapter implements Target { private Adaptee adaptee; public ObjectAdapter(Adaptee adaptee) { this.adaptee = adaptee; } public void method() { this.adaptee.adapteeMethod(); } }