定义
用一个中介对象封装一系列对象的交互,终结者使各个对象不需要显示的相互引用,从而使耦合度松散,而且可以独立的改变他们各自的交互方式。
中介者模式的角色
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
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~