## **模式的定義**
將一個類的接口轉換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。主要是用來解決兼容性問題,主要有類適配器、對象適配,類適配器方式采用繼承方式,對象適配方式使用構造函數傳遞。
## **代碼實現**
需求:中國的民用電都是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();
}
```