Fork me on GitHub

大战设计模式【21】—— 中介者模式

中介者模式(Mediator)

 

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

 

一、定义

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以相对独立地改变它们之间的交互。 

 

二、结构

Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。

ConcreteMediator(具体中介者):它实现了接口,通过协调各个同事对象来实现协作行为,维持了各个同事对象的引用。

Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。

ConcreteColleague(具体同事类):抽象同事类的子类,每一个同事对象需要和其他对象通信时,都需要先与中介者对象通信,通过中介者来间接完成与其他同事类的通信。

 

三、优点

简化了对象之间的交互,它用中介者和同事的一对多交互替代了原来同事之间的多对多交互。

将各同事对象解耦,可以独立地改变和复用每个同事和中介者,增加新的中介和同事很方便,符合开闭原则。

可以减少大量同事子类的生成,改变同事行为只需要生成新的中介者子类即可。

 

四、缺点

具体中介者子类中包含了大量的同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

 

五、应用场景

系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解

一个对象由于引用了其他很多对象并且直接和这些对象通信,难以复用该对象

想要通过一个中间类来封装多个类的行为又不想生成太多子类,引入中介者即可实现

 

六、个人总结

1、中介者模式和名字描述的一样,就是找了一个中介然后通过这个中介来管理一些互相关联状态的类

2、中介者模式主要就是让原来复杂的状态关联解除

3、在交互较少或者说管理类不多的情况下不需要使用

 

 

 

参考博客:http://www.cnblogs.com/edisonchou/p/7247990.html
posted @ 2017-11-08 16:31  LinkinStar  阅读(248)  评论(0编辑  收藏  举报