适配器模式

适配器模式

系统依赖老的类来运行,但需要使用无法支持的新的功能,此时可以用适配器模式,在老的类中装入适配器,调用适配器来运行新的功能。类似于系统依赖一个读卡程序来加载磁盘数据,但是现在需要支持SD、TF卡读数,此时可以实现一个适配器,让原来的cardReader通过适配器调用TF和SD的reader来访问数据。

实现

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
// 最早期软盘reader
public interface Reader {
public void read();
}

public class CardReader implements Reader {
public void read(){}
}

// 后来出现了拓展reader支持TF、SD卡
public interface ExtendReader {
public void readTF();
public void readSD();
}

public class TFCardReader implements ExtendReader {
public void readTF(){
// do read
}
public void readSD(){}
}
public class SDCardReader implements ExtendReader {
public void readTF(){}
public void readSD(){
// do read
}
}

// 扩展cardReader, 可以同时支持读sd、tf
// 1. 实现一个适配器
public class CardReaderAdapter implements Reader {

ExtendReader extendCardReader;

public CardReaderAdapter(String type){
switch (type){
case "sd":
extendCardReader = new SDCardReader();
break;
case "tf":
extendCardReader = new TFCardReader();
break;
default:
throw new Exception("不支持的卡类型");
}
}

public void read(String type){
switch (type){
case "sd":
extendCardReader.readSD();
break;
case "tf":
extendCardReader.readTF();
break;
default:
throw new Exception("不支持的卡类型");
}
}
}

// 2. 把适配器装入CardReader, 增强一下read
public class CardReader implements CardReader {
CardReaderAdapter cardReaderAdapter;

public void read(String type){
switch (type){
case "sd":
case "tf":
cardReaderAdapter = new CardReaderAdapter(type);
cardReaderAdapter.read(type);
default:
// do read
}
}
}