0%

设计模式 - 行为型模式 - 中介者模式

设计模式

设计模式分为创建型模式、结构型模式和行为型模式。
创建型模式:创建对象。
结构型模式:把复杂结构分解为多个类,分解的是类本身(包括算法和属性)。
行为型模式:把复杂算法分解到多个类,分解的是算法。

UML

中介者模式

示例代码

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
public class MediatorPattern {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague1();
Colleague colleague2 = new ConcreteColleague2();
mediator.register(colleague1);
mediator.register(colleague2);
colleague1.send();
colleague2.send();
}
}

abstract class Mediator {
public abstract void register(Colleague colleague);
public abstract void relay(Colleague colleague);
}

class ConcreteMediator extends Mediator {
private List<Colleague> colleagues = new ArrayList<>();

@Override
public void register(Colleague colleague) {
if (!colleagues.contains(colleague)) {
colleagues.add(colleague);
colleague.setMediator(this);
}
}

@Override
public void relay(Colleague colleague) {
for (Colleague c : colleagues) {
if (!c.equals(colleague)) {
c.receive();
}
}
}
}

abstract class Colleague {
protected Mediator mediator;

public void setMediator(Mediator mediator) {
this.mediator = mediator;
}

public abstract void send();
public abstract void receive();
}

class ConcreteColleague1 extends Colleague {
@Override
public void send() {
System.out.println("ConcreteColleague1 send");
mediator.relay(this);
}

@Override
public void receive() {
System.out.println("ConcreteColleague1 receive");
}
}

class ConcreteColleague2 extends Colleague {
@Override
public void send() {
System.out.println("ConcreteColleague2 send");
mediator.relay(this);
}

@Override
public void receive() {
System.out.println("ConcreteColleague2 receive");
}
}