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

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

代码示例:

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("你好适配器!"); 
    }
}

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

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

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

相关推荐
wjs2024几秒前
PHP MySQL 使用 Order By 排序
开发语言
CSDN_Colinw几秒前
C++模块化设计原则
开发语言·c++·算法
Network porter2 分钟前
IDEA2025(2025.2)都更新了什么???
java·intellij-idea·idea
草原上唱山歌2 分钟前
如何理解C语言中的指针?
c语言·开发语言·数据结构
m0_662577973 分钟前
C++中的模板方法模式
开发语言·c++·算法
twc8294 分钟前
不可言说的知识:AI时代软件工程的核心传递问题
java·人工智能·大模型·软件工程·知识工程
csbysj20204 分钟前
PHP 多维数组
开发语言
墨白曦煜7 分钟前
RocketMQ 实战:揭秘 @RocketMQMessageListener 的反序列化魔法与“万能”消费策略
开发语言·python·rocketmq
东方-教育技术博主10 分钟前
AI 写一个可被 Blueprint 调用的角色技能系统
开发语言
华仔啊11 分钟前
前端不懂 Java?后端怕 CSS?这套AI全栈方案专治各种偏科
java·前端·后端