我们经常可以看到适配器出现在我们的代码中,如在Android便充分利用了适配器来实现view和数据的联系,如:ListView和BaseAdapter。
我们举一下一个小例子来说明一下适配器模式。
就拿我们首页的图来看,
我们国家的标准电压是220v,而我们笔记本所需的电压就15v左右;所以肯定不可以把我们的交流电直接接到笔记本上,这时,我们得有一个变压器(电源适配器)就可以了,把220v电压转换成15v;
下面介绍一下代码:
笔记本类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
*
* 笔记本
* @author studyjun
*
*/
public
class
Jotter {
private
VoltageAdapter adapter;
public
VoltageAdapter getAdapter() {
return
adapter;
}
public
void
inputVoltage(){
System.out.println(
"笔记本得到输入电压"
+adapter.transformVoltage()+
"v"
);
}
public
void
setAdapter(VoltageAdapter adapter){
this
.adapter =adapter;
}
}
|
供电器220v,提供220v的电压
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/**
*
* 供电器
* @author studyjun
*
*/
public
class
PowerSupplyDevice {
//标准电压
private
int
standardVoltage =
220
;
/**
* 输出220v电压
* @return
*/
public
int
powerSupply(){
System.out.println(
"标准电压提供220v"
);
return
standardVoltage;
}
}
|
适配器接口,有个电压转换接口
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/**
*
* 电源适配器
* @author studyjun
*
*/
public
interface
VoltageAdapter {
/**
* 转换电压
*/
public
int
transformVoltage();
}
|
笔记本电源适配器类,把220v转为笔记本的15v的电压
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
|
/**
*
* 电源适配器
* @author studyjun
*
*/
public
class
MyVoltageAdapter
implements
VoltageAdapter{
private
int
voltage;
//电压
/**
* 标准电压设备220v
*/
private
PowerSupplyDevice powerSupplyDevice ;
public
MyVoltageAdapter(PowerSupplyDevice powerSupplyDevice) {
this
.powerSupplyDevice = powerSupplyDevice;
}
public
int
getVoltage() {
return
voltage;
}
public
void
setVoltage(
int
voltage) {
this
.voltage = voltage;
}
public
PowerSupplyDevice getPowerSupplyDevice() {
return
powerSupplyDevice;
}
public
void
setPowerSupplyDevice(PowerSupplyDevice powerSupplyDevice) {
this
.powerSupplyDevice = powerSupplyDevice;
}
/**
* 转换电压
*/
public
int
transformVoltage(){
int
voltage = powerSupplyDevice.powerSupply();
int
lowerVoltage = voltage/
14
;
System.out.println(
"转化中电压为="
+lowerVoltage+
"v"
);
return
lowerVoltage;
}
}
|
测试
1
2
3
4
5
6
7
8
9
10
11
12
|
public
class
Test {
public
static
void
main(String[] args) {
Jotter jt =
new
Jotter();
PowerSupplyDevice powerSupplyDevice =
new
PowerSupplyDevice();
VoltageAdapter adapter=
new
MyVoltageAdapter(powerSupplyDevice);
jt.setAdapter(adapter);
jt.inputVoltage();
}
}
|
执行结果
讲到这里,我们总结一下适配器模式的优点和缺点:
优点:
1、可以将两个不同的接口联系起来,耦合性低。
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好,符合开闭原则
类适配器的缺点:
1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。
对象适配器还有的优点:
2、与类适配器模式相比,要想置换适配者类的方法就不容易。