设计模式之适配器模式

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. 客户端统一调用:客户端只依赖目标接口,无需知道底层细节。
相关推荐
码界奇点3 小时前
Java设计模式精讲从基础到实战的常见模式解析
java·开发语言·设计模式·java-ee·软件工程
Charles_go5 小时前
41、C#什么是单例设计模式
java·设计模式·c#
ZHE|张恒5 小时前
设计模式实战篇(六):装饰器模式 —— 让系统具备“可生长能力”的架构思想
设计模式·装饰器模式
孟祥_成都9 小时前
下一代组件的奥义在此!headless 组件构建思想探索!
前端·设计模式·架构
颜酱16 小时前
理解编程的设计原则(前端角度)
设计模式
Wild_Pointer.20 小时前
设计模式实战精讲:全景目录
设计模式·设计规范
一叶飘零_sweeeet1 天前
深度拆解汽车制造系统设计:用 Java + 设计模式打造高扩展性品牌 - 车型动态生成架构
java·设计模式·工厂设计模式
阿波罗尼亚1 天前
设计原则(一)Head First设计模式
设计模式
ZHE|张恒2 天前
设计模式实战篇(五):责任链模式 — 把复杂审批/过滤流程变成可组合的“传递链”
设计模式·责任链模式
CodeAmaz2 天前
使用责任链模式设计电商下单流程(Java 实战)
java·后端·设计模式·责任链模式·下单