简谈设计模式之适配器模式

适配器模式是结构型设计模式之一, 用于将一个类的接口转换成客户期望的另一个接口. 通过使用适配器模式, 原本由于接口不兼容而无法一起工作的类可以协同工作

适配器模式通常有两种实现方式

  1. 类适配器模式 (Class Adapter Pattern): 使用继承来实现适配器。
  2. **对象适配器模式 (Object Adapter Pattern) **: 使用组合来实现适配器。

适配器模式结构

  • 目标接口: 当前系统业务所期待的接口, 可以是抽象类也可以是接口
  • 适配者类: 它是被访问和适配的现存组件库中的组件接口
  • 适配器类: 它是一个转换器, 通过继承或引用适配者的对象, 把适配者接口转换成目标接口, 让客户按目标接口的格式访问适配者

适配器模式实现

  1. 类适配器模式

类适配器模式通过继承目标接口和被适配类, 实现适配功能

// 目标接口
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();
    }
}
  1. 对象适配器模式

对象适配器模式通过组合的方式, 将被适配者类的实例作为适配器的一个字段, 并在适配器中调用被适配者的方法

// 目标接口
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();
    }
}

优点:

  1. 分离接口和实现: 适配器模式将客户端和被适配者类的接口分离开, 通过适配器类进行转换, 增强了代码的灵活性和可维护性
  2. 复用现有类: 通过适配器模式, 可以复用现有的类, 而不需要修改其代码, 从而满足新的需求

缺点

  1. 复杂性增加: 使用适配器模式会增加系统的复杂性, 尤其是需要同时适配多个类时, 可能需要大量的适配器类
  2. 性能开销: 适配器模式会引入额外的接口调用开销, 可能会对性能产生一定的影响

相关推荐

  1. 设计模式适配器模式

    2024-07-17 05:48:04       25 阅读
  2. 设计模式工厂模式

    2024-07-17 05:48:04       24 阅读
  3. 设计模式原型模式

    2024-07-17 05:48:04       28 阅读
  4. 设计模式设计原则

    2024-07-17 05:48:04       28 阅读
  5. 设计模式建造者模式

    2024-07-17 05:48:04       18 阅读
  6. 设计模式单例模式

    2024-07-17 05:48:04       19 阅读
  7. 设计模式桥接模式

    2024-07-17 05:48:04       21 阅读
  8. 设计模式-适配器模式

    2024-07-17 05:48:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 05:48:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 05:48:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 05:48:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 05:48:04       69 阅读

热门阅读

  1. PR轨道蒙版|字体后放视频动画

    2024-07-17 05:48:04       24 阅读
  2. try-catch-finally使用注意事项

    2024-07-17 05:48:04       19 阅读
  3. IPython的数学魅力:%%latex命令绘制公式指南

    2024-07-17 05:48:04       24 阅读
  4. 采购管理软件:改善初创企业的采购流程

    2024-07-17 05:48:04       25 阅读
  5. 机体坐标系和导航坐标系

    2024-07-17 05:48:04       26 阅读
  6. 前后端工作重点小结

    2024-07-17 05:48:04       22 阅读
  7. WPF设置欢迎屏幕,程序启动过度动画

    2024-07-17 05:48:04       19 阅读
  8. 设计模式8种原则

    2024-07-17 05:48:04       20 阅读
  9. 内核线程之User-Mode Helpers

    2024-07-17 05:48:04       21 阅读
  10. 使用Spring Boot集成RocketMQ进行消息发送的示例

    2024-07-17 05:48:04       23 阅读
  11. 量化机器人在不同市场环境下的表现

    2024-07-17 05:48:04       22 阅读
  12. 微信小程序:2.全局开发

    2024-07-17 05:48:04       26 阅读
  13. DRF分页器(Django Restful Framework)

    2024-07-17 05:48:04       29 阅读
  14. 速盾:DDOS攻击能使用高防CDN防御吗?

    2024-07-17 05:48:04       22 阅读
  15. 面试题 29. 顺时针打印矩阵

    2024-07-17 05:48:04       24 阅读