阅读量:4
适配器模式是结构型设计模式之一, 用于将一个类的接口转换成客户期望的另一个接口. 通过使用适配器模式, 原本由于接口不兼容而无法一起工作的类可以协同工作
适配器模式通常有两种实现方式
- 类适配器模式 (Class Adapter Pattern): 使用继承来实现适配器。
- **对象适配器模式 (Object Adapter Pattern) **: 使用组合来实现适配器。
适配器模式结构
- 目标接口: 当前系统业务所期待的接口, 可以是抽象类也可以是接口
- 适配者类: 它是被访问和适配的现存组件库中的组件接口
- 适配器类: 它是一个转换器, 通过继承或引用适配者的对象, 把适配者接口转换成目标接口, 让客户按目标接口的格式访问适配者
适配器模式实现
- 类适配器模式
类适配器模式通过继承目标接口和被适配类, 实现适配功能
// 目标接口 interface Target { void request(); } // 被适配者类 class Adaptee { void specificRequest() { System.out.println("Adaptee's specific request"); } } // 类适配器 class ClassAdapter extends Adaptee implements Target { public void request() { specificRequest(); } } // 客户端代码 public class Client { public static void main(String[] args) { Target target = new ClassAdapter(); target.request(); } }
- 对象适配器模式
对象适配器模式通过组合的方式, 将被适配者类的实例作为适配器的一个字段, 并在适配器中调用被适配者的方法
// 目标接口 interface Target { void request(); } // 被适配类 class Adaptee { void specificRequest() { System.out.println("Adaptee's specific request"); } } // 对象适配器 class ObjectAdapter implements Target { private Adaptee adaptee; public ObjectAdapter(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 ObjectAdapter(); target.request(); } }
优点:
- 分离接口和实现: 适配器模式将客户端和被适配者类的接口分离开, 通过适配器类进行转换, 增强了代码的灵活性和可维护性
- 复用现有类: 通过适配器模式, 可以复用现有的类, 而不需要修改其代码, 从而满足新的需求
缺点
- 复杂性增加: 使用适配器模式会增加系统的复杂性, 尤其是需要同时适配多个类时, 可能需要大量的适配器类
- 性能开销: 适配器模式会引入额外的接口调用开销, 可能会对性能产生一定的影响