适配器模式

 适配器模式(Adapter Pattern)是一种设计模式,它就像我们日常用的电源插头转换器:如果你有一个圆孔的插座(目标接口),但手头是扁插头的电器(现有类),那么需要一个转换器(适配器)把扁插头转成圆插头,让电器能正常通电。

 在代码中,适配器模式的作用是让两个接口不兼容的类能够一起工作。它通过创建一个中间类(适配器),将现有类的接口转换成客户端期望的另一个接口。

适配器模式角色如下:

  • Target:目标接口 (可以是抽象类或接口), 客户希望直接用的接口
  • Adaptee:适配者,但是与Target不兼容
  • Adapter:适配器类, 此模式的核心,通过继承或者引⽤适配者的对象,把适配者转为目标接口
  • client:需要使⽤适配器的对象

 有下面的代码,目标接口为Slf4jApi,这是客户端(Slf4jDemo)希望使用的日志接口,它有一个 log 方法

java 复制代码
interface Slf4jApi {
    void log(String message);
}

 这是一个现有的日志类,但它提供的日志方法名叫 log4jLog,与目标接口的 log 不匹配

java 复制代码
class Log4j {
    void log4jLog(String message) {
        System.out.println("Log4j打印:" + message);
    }
}

 此时设置适配器 Slf4jLog4JAdapter,它实现了目标接口 Slf4jApi,所以客户端可以把它当作 Slf4jApi 来使用。Log4j 对象通过构造函数的方式传入,

java 复制代码
class Slf4jLog4JAdapter implements Slf4jApi {
    private Log4j log4j;

    public Slf4jLog4JAdapter(Log4j log4j) {
        this.log4j = log4j;
    }

    @Override
    public void log(String message) {
        log4j.log4jLog(message);   // 把调用转发给适配者
    }
}

 客户端的代码如下,当客户端调用适配器的 log 方法时,适配器会调用内部 log4j 对象的 log4jLog 方法,完成从 log 到 log4jLog 的转换

java 复制代码
public class Slf4jDemo {
    public static void main(String[] args) {
        Slf4jApi slf4jApi = new Slf4jLog4JAdapter(new Log4j());
        slf4jApi.log("使用slf4j打印日志");
    }
}
相关推荐
2302_805771074 小时前
Day13Jmeter数据驱动
功能测试·单元测试·测试用例·需求分析·测试
2302_805771074 小时前
Day14Jmeter+数据库的操作
功能测试·单元测试·测试用例·需求分析
清风~徐~来8 小时前
【软件测试】allure 测试报告模块
单元测试
2302_8057710717 小时前
Day18在接口自动化测试中引入pytest用例管理框架
功能测试·单元测试·测试用例·需求分析·测试
CAE虚拟与现实3 天前
什么是浏览器冒烟测试
单元测试·测试·冒烟测试·回归测试
写后端的胖头鱼4 天前
一文学会单元测试之----Junit
junit·单元测试
FungLeo6 天前
成为全栈·Node 后端篇·后端测试策略:单元、集成与测试数据库
单元测试·node.js·集成测试·测试策略·成为全栈·测试数据库
yume_sibai6 天前
09-Rust 测试与质量保证(单元测试 + 集成测试 + Mock + Benchmark + Fuzzing + CI/CD)
rust·单元测试·集成测试
ChampaignWolf7 天前
Joule Unit Test 深度集成:ABAP 单元测试的 AI 六件套全解析
人工智能·单元测试·sap·abap·joule·单元测试ai
川石课堂软件测试7 天前
涨薪技术|Prometheus之HTTP API中使用PromQL
网络协议·测试工具·jmeter·http·单元测试·postman·prometheus