13.适配器模式

文章目录


适配器模式

介绍

适配器模式是一种结构型设计模式,主要用于将一个类的接口转换成客户端期望的另一个接口。这样,原本由于接口不匹配而无法一起工作的类可以通过适配器一起工作。

组成

  1. 目标接口(Target Interface): 客户端所期望的接口,适配器通过实现或者继承这个接口,使得适配器对象可以被客户端调用。
  2. 适配器(Adapter): 将被适配者的接口转换成目标接口,使得被适配者可以被客户端使用。
  3. 被适配者(Adaptee): 需要被适配的接口或类,这是客户端现有的类,但其接口与目标接口不匹配。

结构图

场景

假设我们原有系统使用了一个名为LegacyLogger的日志记录类,现在,我们引入了一个新的日志记录框架,我们希望在不修改现有系统代码的情况下,将新的日志记录框架整合到原有系统中,这时可以使用适配器模式。

代码

java 复制代码
//原有的日志记录类
public class LegacyLogger {
    public void log(String message) {
        System.out.println("Legacy Logging: " + message);
    }
}
java 复制代码
//新的日志记录框架
public interface NewLogger {
    void logInfo(String message);
    void logError(String message);
}
java 复制代码
//适配器接口
public interface LegacyLoggerAdapter extends NewLogger {

    // 可以添加一些额外的方法或进行适配
    // void logDebug(String message);
}
java 复制代码
//适配器实现
public class LegacyLoggerAdapterImpl implements LegacyLoggerAdapter {

    private LegacyLogger legacyLogger;

    public LegacyLoggerAdapterImpl(LegacyLogger legacyLogger) {
        this.legacyLogger = legacyLogger;
    }

    @Override
    public void logInfo(String message) {
        // 将新日志框架的info级别映射为旧日志框架的log方法
        legacyLogger.log(message);
    }

    @Override
    public void logError(String message) {
        // 将新日志框架的error级别映射为旧日志框架的log方法
        legacyLogger.log(message);
    }
}
java 复制代码
public class Client {

    public static void main(String[] args) {
        // 原有系统使用LegacyLogger
        LegacyLogger legacyLogger = new LegacyLogger();
        legacyLogger.log("Legacy log message");

        // 引入新日志框架,使用适配器整合到原有系统中
        NewLogger newLogger = new LegacyLoggerAdapterImpl(legacyLogger);
        newLogger.logInfo("New log message: info");
        newLogger.logError("New log message: error");
    }
}

在这个例子中,LegacyLoggerAdapter是适配器接口,LegacyLoggerAdapterImpl是适配器的具体实现,它实现了NewLogger接口,内部使用LegacyLogger来实现新的日志框架接口。客户端代码可以通过NewLogger接口来调用新的日志框架,同时保留了原有系统对LegacyLogger的调用,实现了平滑过渡。这样就不需要修改原有系统代码,而能够整合新的功能。


总结

优点

  1. 兼容性: 适配器模式可以解决新旧系统、接口或类之间的兼容性问题,使它们能够协同工作,无需修改原有代码。
  2. 复用性: 适配器模式使得已有的类和接口能够被复用,无需修改其代码。这样可以减少重复编码,提高代码的复用性。
  3. 解耦性: 适配器模式可以解耦不同系统之间的依赖关系。原有系统不需要关心新系统的实现细节,只需通过适配器进行调用。
  4. 平滑过渡: 在系统升级、迁移或接口变更时,适配器模式可以作为过渡的一种方式,使得系统能够平滑过渡,逐步引入新的功能或接口。

总的来说,适配器模式适用于系统升级、整合或引入新功能时,希望保留原有系统的情况。通过适配器,可以使得新旧系统能够平滑地协同工作,提高系统的可维护性和灵活性。

相关推荐
渣哥1 小时前
原来 Java 里线程安全集合有这么多种
java
间彧1 小时前
Spring Boot集成Spring Security完整指南
java
间彧1 小时前
Spring Secutiy基本原理及工作流程
java
数据智能老司机2 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解2 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机3 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
洛小豆5 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学5 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole5 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊5 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端