适配器模式

 适配器模式(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打印日志");
    }
}
相关推荐
大师兄66683 小时前
HarmonyOS7 单元测试:从 @Test 到覆盖率
单元测试·覆盖率·harmonyos7
HokKeung2 天前
Go 项目难测试,问题通常出在代码结构
单元测试·go
博观而约取厚积而薄发3 天前
Pytest 从入门到精通,一篇就够(超详细实战教程)
python·测试工具·单元测试·自动化·pytest
gis开发之家3 天前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
ysu_03144 天前
06 | 200个单元测试C项目也能TDD
c语言·单元测试·tdd
●VON4 天前
HarmonyKit | 鸿蒙开发展望:HarmonyKit 未来路线图与社区共建
华为·单元测试·harmonyos·鸿蒙
●VON4 天前
HarmonyKit | 鸿蒙新特性:HDS 沉浸光感与空间化视觉设计
华为·性能优化·单元测试·harmonyos·鸿蒙
程序员天天困5 天前
JaCoCo 代码覆盖率:Spring Boot 集成与报告解读
单元测试·测试