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