你的位置:首页 > ASP.net教程

[ASP.net教程]【设计模式】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 Leader10 {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 Leader10 {11   private Colleague1 colleague1;12   private Colleague2 colleague2;13   14   @Override15   public void adjust(Colleague c1, Colleague c2, String message)16   {17     if(c1 == colleague1)18     {19       colleague1.getMessage(message);20     }21     else22     {23       colleague2.getMessage(message);24     }25     26     System.out.print("\t同意和解与\t");27     28     if(c2 == colleague2)29     {30       colleague2.getMessage(message);31     }32     else33     {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 Colleague10 {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 Colleague11 {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 Colleague10 {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:2610  * 作者:cutter_point11 */12 public class Test13 {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没有扔垃圾