设计模式之适配器模式

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. 客户端统一调用:客户端只依赖目标接口,无需知道底层细节。
相关推荐
Small black human11 小时前
设计模式-应用分层
设计模式
码农秋20 小时前
设计模式系列(10):结构型模式 - 桥接模式(Bridge)
设计模式·桥接模式
GodKeyNet20 小时前
设计模式-桥接模式
java·设计模式·桥接模式
N_NAN_N1 天前
类图+案例+代码详解:软件设计模式----原型模式
java·设计模式·原型模式
缘来是庄1 天前
设计模式之组合模式
java·设计模式·组合模式
DKPT1 天前
Java组合模式实现方式与测试方法
java·笔记·学习·设计模式·组合模式
鼠鼠我呀21 天前
【设计模式09】组合模式
设计模式·组合模式
N_NAN_N1 天前
类图+案例+代码详解:软件设计模式----单例模式
java·单例模式·设计模式
尤物程序猿1 天前
设计模式之代理模式--数据库查询代理和调用日志记录
设计模式·代理模式
GodKeyNet2 天前
设计模式-模板模式
设计模式·模板模式