## **模式的定义**
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。主要是用来解决兼容性问题,主要有类适配器、对象适配,类适配器方式采用继承方式,对象适配方式使用构造函数传递。
## **代码实现**
需求:中国的民用电都是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();
}
```