纵有疾风起
人生不言弃

设计模式十八–中介者模式

定义

用一个中介对象封装一系列对象的交互,终结者使各个对象不需要显示的相互引用,从而使耦合度松散,而且可以独立的改变他们各自的交互方式。

中介者模式的角色

1:抽象中介者(Mediator)
该角色定义出同事对象到中介者之间的统一接口,用于各同事之间的通信。

public abstract class Mediator{  public abstract void colleagueChanged(Colleague c);}

2:具体中介者(ConcreateMediator)
该角色实现抽象中介者,它依赖于各个同事角色,并通过协调各同事角色实现协作行为。

public class ConcreteMediator extends Mediator{  private ConcretaeColleague c1;  private ConcretaeColleague c2;  public void colleagueChanged(Colleague c){    c1.action();    c2.action();  }    public void createConcreteMediator(){    c1 = new ConcreteColleague(this);    c2 = new ConcreteColleague(this);  }  public ConcreteColleague getc1(){      return c1;  }  public ConcreteColleague getc2(){    return c2;  }}

3:抽象同事角色(Colleague)
该角色定义出中介者到同事之间的接口,同事对象只知道中介者而不知道其余的同事对象。

public abstract class Colleague{  private Mediator mediator;    public Colleague(Mediator mediator){    this.mediator = mediator;  }    public Mediator getMediator{    return this.mediator;  }   public void setMediator(Mediator mediator){    this.mediator = mediator;  }  //调用此方法改变自身的状态  public void change(){    this.mediator.colleagueChanged(this);  }  //抽象行动,子类实现  public abstract void action();}

4:具体同事(ConcreateColleague)
该角色实现同事类,每个具体同事类都清楚自己小范围块的行为,而不知道大范围的目的。

//第一个同事public class ConcreteColleague1 extends Colleague{  public ConcreteColleague1(Mediator mediator){    super(mediator);   }    @Override    public void action(){      System.out.println("action1 !");    }}//第二个同事public class ConcreteColleague2 extends Colleague{  public ConcreteColleague2(Mediator mediator){    super(mediator);   }    @Override    public void action(){      System.out.println("action2 !");    }}

优点

1:减少类之间的依赖,将原有一对多的关系变成一对一的依赖,使得对象之间的关系容易维护。
2:避免同事对象之间过度耦合,同类只依赖于中介者,使同类更容易被复用。
3:中介者模式将对象的协作和行为抽象,将对象在小尺度行为上与其他对象的相互作用分开处理。

缺点

1:中介者模式降低了同事类之间的复杂性,但是增加了中介者类的复杂性。
2:中介者经常充满各种具体同事类的关系协调代码,并且代码不能复用。

注意事项

1:不应当在责任划分混乱的时候使用。
2:不应当对数据类和方法类使用。
3:正确理解封装(行为封装)

参考资料:设计模式(java)

文章转载于:https://www.jianshu.com/p/ec7237cc059d

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式十八–中介者模式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录