设计模式之适配器模式

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. 客户端统一调用:客户端只依赖目标接口,无需知道底层细节。
相关推荐
半路下车25 分钟前
【Harmony OS 5】HarmonyOS应用测试指南
设计模式·harmonyos
周某某~31 分钟前
一.设计模式的基本概念
设计模式
on the way 1231 小时前
行为型设计模式之Interpreter(解释器)
设计模式
cui_hao_nan1 小时前
设计模式——模板方法
java·设计模式
在未来等你1 小时前
Java并发编程实战 Day 11:并发设计模式
java·设计模式·多线程·并发编程·threadlocal·生产者消费者·读写锁
牛奶咖啡132 小时前
学习设计模式《十二》——命令模式
学习·设计模式·命令模式·队列请求·宏命令·可撤销恢复操作·参数化配置
哆啦A梦的口袋呀3 小时前
基于Python学习《Head First设计模式》第七章 适配器和外观模式
python·学习·设计模式
何中应3 小时前
【设计模式-5】设计模式的总结
java·后端·设计模式
季鸢12 小时前
Java设计模式之状态模式详解
java·设计模式·状态模式
smallluan17 小时前
JS设计模式(4):观察者模式
javascript·观察者模式·设计模式