ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## **模式的定义** 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。主要是用来解决兼容性问题,主要有类适配器、对象适配,类适配器方式采用继承方式,对象适配方式使用构造函数传递。 ## **代码实现** 需求:中国的民用电都是220V,苹果手机充电只需要5V的电压,而小米手机充电只需要3V电压,那这个时候苹果公司和小米公司会分别使用他们的电压适配器,将220V的输入电压变换为5V或者3V输出。 **类适配器模式**: 1. 定义交流电接口 ``` public interface AC { int outputAC(); } ``` 2. 实现220V的交流电方法 ``` // 220V 交流电 public class AC220 implements AC { @Override public int outputAC() { return 220; } } ``` 3. 定义适合手机使用的交流电接口以及实现方式 ``` // 直流电接口 public interface DC { // 输出电压 int outputDC(); } // 输出3V电压 public class DC3 implements DC { @Override public int outputDC() { return 3; } } // 输出5V电压 public class DC5 implements DC{ @Override public int outputDC() { return 5; } } ``` 3. 分别创建苹果和小米的电源适配器,将220V交流电转化成5V或者3V的直流电 ``` public class ApplePowerAdapter extends DC5 implements AC { @Override public int outputAC() { System.out.println("使用Apple适配器输出5V电压"); return super.outputDC(); } } public class XiaomiPowerAdapter extends DC3 implements AC{ @Override public int outputAC() { System.out.println("使用Xiaomi适配器输出3V电压"); return super.outputDC(); } } ``` 4. 客户端调用 ``` public static void main(String[] args) { // 苹果手机使用苹果的适配器输出5V电压 ApplePowerAdapter applePowerAdapter = new ApplePowerAdapter(); applePowerAdapter.outputAC(); // 小米手机使用小米的适配器输出3V电压 XiaomiPowerAdapter xiaomiPowerAdapter = new XiaomiPowerAdapter(); xiaomiPowerAdapter.outputAC(); } **对象配器模式**: 在上面的例子中,苹果和小米分别使用了自己的适配器来充电,聪明的人在这个时候就发现了一种商机,能否将2种适配器合二为一,发明一种适配器既可以给苹果手机充电又可以给小米手机充电呢,答案是肯定的。那我们代码又如何实现呢? 创建统一的电源适配器,使用带参构造函数的方式,在初始化时通过识别是手机类型来输出额定电压。 ``` public class PowerAdapter implements AC { private DC dc; public PowerAdapter(DC dc) { this.dc = dc; } @Override public int outputAC() { System.out.println("使用220V电源"); return dc.outputDC(); } } ``` 客户端调用 ``` public static void main(String[] args) { PowerAdapter apple = new PowerAdapter(new DC5()); apple.outputAC(); PowerAdapter xiaomi = new PowerAdapter(new DC3()); xiaomi.outputAC(); } ```