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

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

代码示例:

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

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

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

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

相关推荐
跟着珅聪学java6 分钟前
Java 发送 HTTP POST请求教程
开发语言·lua
重生之我是Java开发战士6 分钟前
【C语言】动态内存管理详解
c语言·开发语言·算法
Hello.Reader1 小时前
Rust ⽣成 .wasm 的极致瘦⾝之道
开发语言·rust·wasm
稚肩1 小时前
DHCP 握手原理
开发语言·网络协议
hty621 小时前
Spring Boot 注解式大文件 Excel 导入工具:excel‑import‑spring‑boot‑starter
java
李少兄1 小时前
解决IntelliJ IDEA 项目名称后带中括号问题(模块名不一致)
java·ide·intellij-idea
赵_|大人1 小时前
Qt 自动无法加载数据库为空
开发语言·数据库·qt
fbbqt1 小时前
Go语言 逃 逸 分 析
开发语言·golang
Alt.91 小时前
SpringMVC(一)
java·mvc
干了这杯柠檬多1 小时前
使用maven-shade-plugin解决es跨版本冲突
java·elasticsearch·maven