设计模式之适配器模式

1.目标接口

复制代码
//客户端期望的接口(例如:5V充电接口)
public interface Voltage5V {
    int output5V(); // 输出5V电压的方法
}

2.被适配者

复制代码
//现有的220V电源(需要被转换成5V)
public class Voltage220V {
    public int output220V() {
        System.out.println("输出220V电压");
        return 220; // 返回实际电压值
    }
}

3.适配器

复制代码
//实现目标接口,并持有被适配者的引用
public class VoltageAdapter implements Voltage5V {
    private Voltage220V voltage220V; // 组合被适配者

    // 构造器传入被适配对象
    public VoltageAdapter(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    @Override
    public int output5V() {
        // 调用被适配者的方法,并转换电压
        int srcVoltage = voltage220V.output220V();
        int dstVoltage = srcVoltage / 44; // 模拟电压转换(220V -> 5V)
        System.out.println("适配器转换电压:" + dstVoltage + "V");
        return dstVoltage;
    }
}

4.客户端

复制代码
// 手机充电(需要5V电压)
public class Phone {

    // 充电方法(依赖5V接口)
    public void charging(Voltage5V voltage5V) {
        int voltage = voltage5V.output5V();
        if (voltage == 5) {
            System.out.println("电压5V,充电成功!");
        } else {
            System.out.println("电压不符,充电失败!");
        }
    }

}

5.测试类

复制代码
public class AdapterDemo {
    public static void main(String[] args) {
        // 1. 创建一个220V电源
        Voltage220V voltage220V = new Voltage220V();

        // 2. 创建适配器,将220V转换为5V
        Voltage5V voltageAdapter = new VoltageAdapter(voltage220V);

        // 3. 手机使用适配器充电
        Phone phone = new Phone();
        phone.charging(voltageAdapter); // 输出:电压5V,充电成功!
    }
}

具体执行流程

  1. 客户端(Phone)​ 调用 charging() 方法,传入适配器对象。
  2. 适配器(VoltageAdapter)​ 内部调用被适配者 Voltage220Voutput220V()
  3. 适配器 将 220V 转换为 5V,返回给客户端。
  4. 客户端 根据返回值判断是否充电成功。

总结代码特点

  1. 不修改原有代码Voltage220V 原有逻辑不变。
  2. 通过适配器桥接:适配器实现目标接口,内部调用被适配对象。
  3. 客户端统一调用:客户端只依赖目标接口,无需知道底层细节。
相关推荐
木斯佳4 小时前
HarmonyOS 6 三方SDK对接:从半接模式看Share Kit原理——系统分享的运行机制与设计理念
设计模式·harmonyos·架构设计·分享·半接模式
yydonk4 小时前
像 Agent 一样思考:从 Claude Code 架构演进看 AI Agent 工具设计
设计模式
Jackson_Li7 小时前
大多数人对 Claude Code Skills 的理解,在第一步就错了
人工智能·设计模式
似水明俊德11 小时前
13-C#.Net-设计模式六大原则-学习笔记
笔记·学习·设计模式·c#·.net
wangchunting13 小时前
Java设计模式
java·单例模式·设计模式
孟陬1 天前
国外技术周刊 #3:“最差程序员”带动高效团队、不写代码的创业导师如何毁掉创新…
前端·后端·设计模式
砍光二叉树1 天前
【设计模式】结构型-代理模式
设计模式·系统安全·代理模式
新缸中之脑1 天前
AI智能体五大设计模式
人工智能·机器学习·设计模式
砍光二叉树1 天前
【设计模式】结构型-装饰器模式
设计模式·装饰器模式
han_1 天前
JavaScript设计模式(三):代理模式实现与应用
前端·javascript·设计模式