适配器模式

 适配器模式(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打印日志");
    }
}
相关推荐
芒鸽8 小时前
鸿蒙应用测试实战:从单元测试到自动化测试
华为·单元测试·harmonyos
老码观察21 小时前
设计模式实战解读(七):适配器模式——让不兼容的接口无缝协作
java·设计模式·适配器模式
MC皮蛋侠客1 天前
Google Test 单元测试指南
c++·单元测试·google test
英俊潇洒美少年3 天前
前端 Jest 单元测试零基础实战:模板、提效、避坑、面试题(Vue 项目可用)
前端·vue.js·单元测试
测试员周周6 天前
【Appium 系列】第18节-重试与容错 — 移动端测试的稳定性保障
人工智能·python·功能测试·ui·单元测试·appium·测试用例
测试员周周7 天前
【Appium 系列】第17节-XMind用例转换 — 从思维导图到 YAML
java·服务器·人工智能·单元测试·appium·测试用例·xmind
一路往蓝-Anbo7 天前
第五章:如何对 HAL 库本身进行单元测试?
网络·数据结构·stm32·单片机·嵌入式硬件·单元测试·tdd
计算机安禾7 天前
【c++面向对象编程】第49篇:面向对象的单元测试:用GoogleTest测试类
开发语言·c++·单元测试
测试员周周7 天前
【Appium 系列】第20节-测试项目结构设计 — 从脚本到工程
人工智能·数据挖掘·回归·单元测试·appium·测试用例·测试覆盖率