【設計模式】17、中介者模式


 

 

 

 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沒有扔垃圾

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com