适配器模式

适配器模式(Adapter Pattern)是一种结构模式,主要是实现类、对象、接口的兼容性,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
* Copyright,ShanNong Inc,2018 and onwards
*
* Author:fanghua fan
*/

package com.fanghua.designpattrn.adapter;

/**
* 适配器模式
*/
public class ClassAdapterPattern {
public static void main(String[] args) {
System.out.println("客户开始挑选电器……");
OperatorElectricalEquipment om11 = new OperatorElectricalEquipment();
om11.buy(Country.AMERICA);
om11.testRunning();
System.out.println();
OperatorElectricalEquipment om22 = new OperatorElectricalEquipment();
om22.buy(Country.GERMANY);
om22.testRunning();
System.out.println();
OperatorElectricalEquipment om33 = new OperatorElectricalEquipment();
om33.buy(Country.JAPAN);
om33.testRunning();
System.out.println();
System.out.println("客户成功挑选电器……");
}
}

class OperatorElectricalEquipment {
private Country name;

/**
* 用户买电器
*
* @param name
* @return
*/
public int buy(Country name) {
this.name = name;
System.out.println("用户成功买到:" + name.getName() + "电器");
return 200;
}

/**
* 启动电器
*
* @return
*/
public int testRunning() {
System.out.println("电压正在开始适配……");
// 创建适配器
VoltageAdapter adpter = new VoltageAdapter();
adpter.outputVoltage(name);
System.out.println("适配" + name.getName() + "标准电压成功!");
System.out.println("正在启动电器……");
System.out.println("启动电器成功!");
return 200;
}

}

/**
* 中国正常电压220V
*/
class ChinaVoltage220 {
/**
* 输出中国电压标准
*
* @return
*/
public int output220V() {
int srcVoltage = 220;
System.out.println("中国正常家用电压" + srcVoltage + "V");
return srcVoltage;
}
}

/**
* 国家标准电压接口
*/
interface CountryStandardVoltage {
int outputVoltage(Country name);
}

/**
* 正常电压适配器
*/
class VoltageAdapter extends ChinaVoltage220 implements CountryStandardVoltage {
int src = output220V();

/**
* 电压适配器
*
* @param name
* @return
*/
public int outputVoltage(Country name) {
int dst = 0;
switch (name) {
case AMERICA:
dst = (int)(src / ((double)src / 110));
break;
case JAPAN:
dst = (int)(src / ((double)src / 120));
break;
case GERMANY:
dst = (int)(src / ((double)src / 230));
break;
default:
dst = src;
}
System.out.println(name.getName() + "适配电压成功,当前电压:" + dst + 'V');
return dst;
}
}

/**
* 国家枚举
*/
enum Country {
AMERICA("美国"),
JAPAN("日本"),
GERMANY("德国");

private String name;

Country(String name) {
this.name = name;
}

public String getName() {
return name;
}

@Override
public String toString() {
return "Country{" +
"name='" + name + '\'' +
'}';
}
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
客户开始挑选电器……
用户成功买到:美国电器
电压正在开始适配……
中国正常家用电压220V
美国适配电压成功,当前电压:110V
适配美国标准电压成功!
正在启动电器……
启动电器成功!

用户成功买到:德国电器
电压正在开始适配……
中国正常家用电压220V
德国适配电压成功,当前电压:230V
适配德国标准电压成功!
正在启动电器……
启动电器成功!

用户成功买到:日本电器
电压正在开始适配……
中国正常家用电压220V
日本适配电压成功,当前电压:120V
适配日本标准电压成功!
正在启动电器……
启动电器成功!

客户成功挑选电器……