中介者模式Mediator

 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。
  1. 中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
  2. 中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通讯的场合,以及想定制一个分布
             在多个类中的行为,而又不想生成太多的子类的场合。
  3. 每当对象集合内的交互错综复杂的时候,我们就可以在该组对象之外创建一个中介者类来集中处理
             这些交互行为。这样,对象集合 中每个对象就不必为其他对象负责,从而降低集合中对象之间的耦合
             程度,也就是松散耦合。
  4. 我们可以利用中介者模式来管理关系的完整性。

 

  类结构图:

 

  Mediator.java

  package com.china_chenglong; public abstract class Mediator { public abstract void Send(String message,Colleague colleague); } 

  ConcreteMediator.java

  package com.china_chenglong; public class ConcreteMediator extends Mediator { private ConcreteColleague1 colleague1; private ConcreteColleague2 colleague2; public void SetColleague1(ConcreteColleague1 colleague1){ this.colleague1 = colleague1; } public void SetColleague2(ConcreteColleague2 colleague2){ this.colleague2 = colleague2; } public void Send(String message, Colleague colleague) { if(this.colleague1 == colleague){ this.colleague2.Notify(message); } else{ this.colleague1.Notify(message); } } } 

  Colleague.java

  package com.china_chenglong; public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator){ this.mediator = mediator; } } 

  ConcreteColleague1.java

  package com.china_chenglong; public class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator){ super(mediator); } public void Send(String message){ mediator.Send(message, this); } public void Notify(String message){ System.out.println("同事1得到消息:"+message); } } 

  ConcreteColleague2.java

  package com.china_chenglong; public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator){ super(mediator); } public void Send(String message){ mediator.Send(message, this); } public void Notify(String message){ System.out.println("同事2得到消息:"+message); } } 

  Main.java

  package com.china_chenglong; public class Main { public static void main(String[] args) { ConcreteMediator m = new ConcreteMediator(); ConcreteColleague1 colleague1 = new ConcreteColleague1(m); ConcreteColleague2 colleague2 = new ConcreteColleague2(m); m.SetColleague1(colleague1); m.SetColleague2(colleague2); colleague1.Send("吃过饭了吗?"); colleague2.Send("吃过了"); } } 

你可能感兴趣的:(中介者模式Mediator)