定义(并非来自百度百科,百度没收录此词条...):
用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式又称为调停者模式,它是一种对象行为型模式。
UML类图:
具体代码:
abstract public class Mediator { protected ArrayList<Colleague> colleagues; public void register(Colleague colleague) { colleagues.add(colleague); } public abstract void operation(); } public class ConcreteMediator extends Mediator { @Override public void operation() { System.out.println("123"); ((Colleague)(colleagues.get(0))).method1(); } } abstract public class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator=mediator; } public abstract void method1(); public void method2() { mediator.operation(); } } public class ConcreteColleague extends Colleague { public ConcreteColleague(Mediator mediator) { super(mediator); } @Override public void method1() { } }
模块说明:
Mediator:该接口用于与各同事对象之间进行通信
ConcreteMediator:抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各个同事对象的引用
Colleague:定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信
ConcreteColleague:它是抽象同事类的子类;每一个同事对象在需要和其他同事对象通信时,
先与中介者通信,通过中介者来间接完成与其他同事类的通信;在具体同事类中实现了在抽象同事类中声明的抽象方法
适用场景:
解决一系列对象之间复杂的耦合关系,这一系列对象往往是“多对多”的耦合关系。
优缺点:
优点:
简化了对象之间的交互
可将各同事对象解耦
减少子类生成
缺点:
中介者类中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,不易维护
总结:
中介者模式的本质就是封装各个同事部分的交互,统一由中介者管理