十七、中介者模式Mediator(行为型)

来源:互联网 发布:数据库的安全防护措施 编辑:程序博客网 时间:2024/06/10 06:21

中介对象可以封装一系列的对象交互,它可以使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在进行面向对象设计时,一般倾向于将系统分割成许多对象,这样可以增加复用性,但是这样做会导致对象的关系会非常复杂。中介者可以将这些集体行为封装起来,充当控制和协调这组对象交互的角色,从而使得这些对象之间不再有显式的相互引用,它们只知道中介者,从而减少了相互连接的数目。

中介者的优缺点很明显,例如它可以减少子类生成,降低各个Colleague之间的耦合度,简化对象协议,协作对象进行抽象,但是它使得控制集中,可能会导致Mediator难以维护。

在控制Colleague和Mediator之间的通信时,常用的方式有两种:一种是使用Observer模式,将Mediator实现为一个Observer,各个Colleague作为Subject,一旦状态改变就发通知给Mediator;另一种是在Mediator中定义一个特殊的通知接口,各个Colleague在通信时直接调用该接口。


public class Colleague {private Mediator mediator = null;public Colleague(Mediator mediator) {this.mediator = mediator;}public void changed() {mediator.doChange(this);}}public class ConcreteColleague1 extends Colleague{public ConcreteColleague1(Mediator mediator) {super(mediator);}public void doJob1(){System.out.println("Doing Job1...");}}public class ConcreteColleague2 extends Colleague {public ConcreteColleague2(Mediator mediator) {super(mediator);}public void doJob2() {System.out.println("Doing Job2...");}}public interface Mediator {public void initalState();public void doChange(Colleague colleague);public void show();}public class ConcreteMediator implements Mediator{private ConcreteColleague1 colleague1 = null;private ConcreteColleague2 colleague2 = null;@Overridepublic void initalState() {colleague1 = new ConcreteColleague1(this);colleague2 = new ConcreteColleague2(this);}@Overridepublic void doChange(Colleague colleague) {if(colleague == colleague1){colleague1.doJob1();System.out.println("Do other changes in mediator");} else if(colleague == colleague2){colleague2.doJob2();}}@Overridepublic void show() {colleague1.changed();colleague2.changed();}}public class Client {@Testpublic void test(){Mediator mediator = new ConcreteMediator();mediator.initalState();mediator.show();}}

客户端只需要调用Mediator中的方法就可以控制整个系统,Mediator可以将Colleague协调起来,而且每个Colleague的实现类中都包含了对Mediator的引用,这样,当Colleague自身改变时也可以将改变的消息传递给Mediator,从而让Mediator管理所有的Colleague。

这种模式的好处在于它可以将复杂性封装在Mediator内部,并且消除了Colleague之间的依赖关系,但是当Mediator中控制变化的方法复杂性增加时,就会导致许多问题,并抵消这种模式在其他方面带来的好处。

0 0
原创粉丝点击