
1 package com.shejimoshi.behavioral.Mediator;
2
3
4 /**
5 * 功能:领导者接口
6 * 时间:2016年3月5日下午10:41:35
7 * 作者:cutter_point
8 */
9 public interface Leader
10 {
11 //寝室长负责调解
12 public void adjust(Colleague c1, Colleague c2, String message);
13 }
1 package com.shejimoshi.behavioral.Mediator;
2
3
4 /**
5 * 功能:寝室长
6 * 时间:2016年3月5日下午10:48:20
7 * 作者:cutter_point
8 */
9 public class DormitoryLeader implements Leader
10 {
11 private Colleague1 colleague1;
12 private Colleague2 colleague2;
13
14 @Override
15 public void adjust(Colleague c1, Colleague c2, String message)
16 {
17 if(c1 == colleague1)
18 {
19 colleague1.getMessage(message);
20 }
21 else
22 {
23 colleague2.getMessage(message);
24 }
25
26 System.out.print("\t同意和解与\t");
27
28 if(c2 == colleague2)
29 {
30 colleague2.getMessage(message);
31 }
32 else
33 {
34 colleague1.getMessage(message);
35 }
36 }
37
38 public Colleague1 getColleague1()
39 {
40 return colleague1;
41 }
42
43 public void setColleague1(Colleague1 colleague1)
44 {
45 this.colleague1 = colleague1;
46 }
47
48 public Colleague2 getColleague2()
49 {
50 return colleague2;
51 }
52
53 public void setColleague2(Colleague2 colleague2)
54 {
55 this.colleague2 = colleague2;
56 }
57
58 }
1 package com.shejimoshi.behavioral.Mediator;
2
3
4 /**
5 * 功能:同事接口
6 * 时间:2016年3月5日下午10:49:16
7 * 作者:cutter_point
8 */
9 public abstract class Colleague
10 {
11 protected Leader mediator; //中介者
12
13 public Colleague(Leader l)
14 {
15 this.mediator = l;
16 }
17 }
1 package com.shejimoshi.behavioral.Mediator;
2
3
4
5 /**
6 * 功能:同事类
7 * 时间:2016年3月5日下午10:51:31
8 * 作者:cutter_point
9 */
10 public class Colleague1 extends Colleague
11 {
12 public Colleague1(Leader l)
13 {
14 super(l);
15 }
16
17 //争吵
18 public void quarrel(String message, Colleague c1)
19 {
20 //和c1进行争吵
21 this.mediator.adjust(this, c1, message);
22 }
23
24 //得到劝解
25 public void getMessage(String message)
26 {
27 System.out.println("colleague1" + message);
28 }
29 }
1 package com.shejimoshi.behavioral.Mediator;
2
3
4 /**
5 * 功能:同事2
6 * 时间:2016年3月5日下午11:07:50
7 * 作者:cutter_point
8 */
9 public class Colleague2 extends Colleague
10 {
11
12 public Colleague2(Leader l)
13 {
14 super(l);
15 }
16
17 //争吵
18 public void quarrel(String message, Colleague c2)
19 {
20 //和c1进行争吵
21 this.mediator.adjust(this, c2, message);
22 }
23
24 //得到劝解
25 public void getMessage(String message)
26 {
27 System.out.println("colleague2" + message);
28 }
29
30 }
1 package com.shejimoshi.behavioral.Mediator;
2
3
4 /**
5 * 功能:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互
6 * 适用:一组对象以定义良好但是复杂的方式进行通信。产生的相互的依赖关系结构混乱且难以理解
7 * 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象
8 * 想定制一个分布在多个类中的行为,而又不想生成太多子类。
9 * 时间:2016年3月5日下午8:24:26
10 * 作者:cutter_point
11 */
12 public class Test
13 {
14 public static void main(String[] args)
15 {
16 //创建寝室长
17 DormitoryLeader dl = new DormitoryLeader();
18 //创建两个在寝室中的同事
19 Colleague1 c1 = new Colleague1(dl);
20 Colleague2 c2 = new Colleague2(dl);
21
22 dl.setColleague1(c1);
23 dl.setColleague2(c2);
24
25 c1.quarrel("乱扔垃圾", c2);
26 c2.quarrel("没有扔垃圾", c1);
27
28 }
29 }
colleague1乱扔垃圾
同意和解与 colleague2乱扔垃圾
colleague2没有扔垃圾
同意和解与 colleague1没有扔垃圾