0%

设计模式-中介者模式

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互。

类图

3Mx5cT.md.png

实现

1
2
3
4
5
public abstract class Mediator {

public abstract void send(String message, Colleague colleague);

}
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
public class ConcreteMediator extends Mediator {

private ConcreteColleague1 c1;
private ConcreteColleague2 c2;

public ConcreteColleague1 getC1() {
return c1;
}

public void setC1(ConcreteColleague1 c1) {
this.c1 = c1;
}

public ConcreteColleague2 getC2() {
return c2;
}

public void setC2(ConcreteColleague2 c2) {
this.c2 = c2;
}

@Override
public void send(String message, Colleague colleague) {
if (colleague == c1) {
c2.receive(message);
} else {
c1.receive(message);
}
}

}
1
2
3
4
5
6
7
8
9
public abstract class Colleague {

protected Mediator mediator;

public Colleague(Mediator mediator) {
this.mediator = mediator;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ConcreteColleague1 extends Colleague {

public ConcreteColleague1(Mediator mediator) {
super(mediator);
}

public void send(String message) {
mediator.send(message, this);
}

public void receive(String message) {
System.out.println("-> Colleague 1: " + message);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ConcreteColleague2 extends Colleague {

public ConcreteColleague2(Mediator mediator) {
super(mediator);
}

public void send(String message) {
mediator.send(message, this);
}

public void receive(String message) {
System.out.println("-> Colleague 2: " + message);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
public class Client {

public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1(mediator);
ConcreteColleague2 c2 = new ConcreteColleague2(mediator);
mediator.setC1(c1);
mediator.setC2(c2);
c1.send("I'm ConcreteColleague1.");
}

}