适配器模式

……

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
package org.sang.plugins.shejimoshi;

/**
* 适配器模式的优点:
*
* 可以让两个没有任何关系的类在一起运行
* 增加了类的透明性:我们访问的Target目标角色,但是具体的实现都委托给了源角色,而这些对高层次模块是透明的,也是它不需要关心的
* 提高了类的复用度:源角色还可以在原有的系统中正常使用,而在目标角色中也可以充当新的演员
* 灵活性非常好
* 适配器模式的使用场景:
*
*         当你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或者新建立的类,但这个类又不符合系统的接口,就可以使用适配器模式。
*
* 适配器模式的注意事项:
*
*         它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题。
*/
public class Adapt {
public static void main(String args[]) {
Target target = new ConcretTarget();
target.request();
Target target2 = new Adapter();
target2.request();
}
}

/**
* 目标角色
*/
interface Target {
//目标角色有自己的方法
public void request();

}

/**
* 目标角色的实现类
*/
class ConcretTarget implements Target {
@Override
public void request() {
System.out.println("if you need any help,pls call me!");
}
}

/**
* 源角色
*/
class Adaptee {
public void doSomething() {
System.out.println("I'm kind of busy,leave me alone,pls!");
}
}

/**
* 适配器角色
*/
class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.doSomething();
}
}

/**
* 适配器角色
*/
class Adapter1 implements Target {
private Adaptee adaptee;

public Adapter1(Adaptee adaptee) {
this.adaptee = adaptee;
}

@Override
public void request() {
adaptee.doSomething();
}
}