-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMediatorTest.java
95 lines (85 loc) · 3.03 KB
/
MediatorTest.java
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
package com.design.pattern.behavior.mediator;
import java.util.ArrayList;
import java.util.List;
/**
* 中介模式
* mediator pattern
*
* 其主要优点如下。
* 类之间各司其职,符合迪米特法则。
* 降低了对象之间的耦合性,使得对象易于独立地被复用。
* 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。
*
* 抽象中介者(Mediator)角色:
* 它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
* 具体中介者(Concrete Mediator)角色:
* 实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
* 抽象同事类(Colleague)角色:
* 定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
* 具体同事类(Concrete Colleague)角色:
* 是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
*
*
*/
public class MediatorTest {
public static void main(String[] args) {
Mediator md = new ConcreteMediator();
Colleague c1, c2;
c1 = new ConcreteColleague1();
c2 = new ConcreteColleague2();
md.register(c1);
md.register(c2);
c1.send();
System.out.println("------------------");
c2.send();
}
static abstract class Mediator{
protected List<Colleague> colleagues = new ArrayList<>();
public void register(Colleague cl){
if (!colleagues.contains(cl)) {
colleagues.add(cl);
}
}
public abstract void relay(Colleague cl);
}
static class ConcreteMediator extends Mediator{
@Override
public void relay(Colleague cl) {
for (Colleague colleague : colleagues) {
if (!colleague.equals(cl)) {
((Colleague) colleague).receive();
}
}
}
}
static abstract class Colleague{
protected Mediator mediator;
public void setMedium(Mediator mediator){
this.mediator=mediator;
}
public abstract void receive();
public abstract void send();
}
static class ConcreteColleague1 extends Colleague{
@Override
public void receive() {
System.out.println("具体同事类1收到请求。");
}
@Override
public void send() {
System.out.println("具体同事类1发出请求。");
mediator.relay(this);
}
}
static class ConcreteColleague2 extends Colleague{
@Override
public void receive() {
System.out.println("具体同事类2收到请求。");
}
@Override
public void send() {
System.out.println("具体同事类2发出请求。");
mediator.relay(this);
}
}
}