适配器模式:兼容不兼容接口

将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。

代码示例:

java 复制代码
// 目标接口(客户端期望的格式)
interface ModernPrinter {
    void printDocument(String text);
}

// 被适配的旧类(不兼容)
class LegacyPrinter {
    void print(String message, int copies) {
        for (int i = 0; i < copies; i++) {
            System.out.println("旧类打印: " + message);
        }
    }
}

// 适配器类(转换接口)
class PrinterAdapter implements ModernPrinter {
    private final LegacyPrinter legacyPrinter = new LegacyPrinter();
    
    @Override
    public void printDocument(String text) {
        // 调用旧类方法并适配参数
        legacyPrinter.print(text, 1); // 默认打印1份
    }
}

// 客户端调用
public class Client {
    public static void main(String[] args) {
        ModernPrinter printer = new PrinterAdapter();
        printer.printDocument("你好适配器!"); 
    }
}

**使用场景:**整合第三方库/遗留代码、系统接口升级时兼容旧模块

**优点:**复用现有代码;灵活性高

**缺点:**过度使用会导致系统结构混乱

相关推荐
江湖有缘5 分钟前
【Docker项目实战】使用Docker部署ShowDoc文档管理工具
java·docker·容器
2401_8414956410 分钟前
【数据结构】汉诺塔问题
java·数据结构·c++·python·算法·递归·
程序猿阿越15 分钟前
Kafka源码(六)消费者消费
java·后端·源码阅读
失散1317 分钟前
分布式专题——35 Netty的使用和常用组件辨析
java·分布式·架构·netty
枫叶丹417 分钟前
【Qt开发】输入类控件(五)-> QDateTimeEdit
开发语言·qt
Terio_my23 分钟前
Spring Boot 热部署配置
java·spring boot·后端
xxxxxxllllllshi30 分钟前
Java 集合框架全解析:从数据结构到源码实战
java·开发语言·数据结构·面试
埃泽漫笔41 分钟前
消息顺序消费问题
java·mq
爱编程的鱼1 小时前
Python 与 C++、C 语言的区别及选择指南
c语言·开发语言·c++
运维闲章印时光1 小时前
网络断网、环路、IP 冲突?VRRP+MSTP+DHCP 联动方案一次性解决
运维·服务器·开发语言·网络·php