【设计模式】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("	同意和解与	");
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没有扔垃圾
原文地址:https://www.cnblogs.com/cutter-point/p/5246269.html