大战设计模式【21】—— 中介者模式
中介者模式(Mediator)
设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample
一、定义
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以相对独立地改变它们之间的交互。
二、结构
Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。
ConcreteMediator(具体中介者):它实现了接口,通过协调各个同事对象来实现协作行为,维持了各个同事对象的引用。
Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
ConcreteColleague(具体同事类):抽象同事类的子类,每一个同事对象需要和其他对象通信时,都需要先与中介者对象通信,通过中介者来间接完成与其他同事类的通信。
三、优点
简化了对象之间的交互,它用中介者和同事的一对多交互替代了原来同事之间的多对多交互。
将各同事对象解耦,可以独立地改变和复用每个同事和中介者,增加新的中介和同事很方便,符合开闭原则。
可以减少大量同事子类的生成,改变同事行为只需要生成新的中介者子类即可。
四、缺点
具体中介者子类中包含了大量的同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。
五、应用场景
系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解
一个对象由于引用了其他很多对象并且直接和这些对象通信,难以复用该对象
想要通过一个中间类来封装多个类的行为又不想生成太多子类,引入中介者即可实现
六、个人总结
1、中介者模式和名字描述的一样,就是找了一个中介然后通过这个中介来管理一些互相关联状态的类
2、中介者模式主要就是让原来复杂的状态关联解除
3、在交互较少或者说管理类不多的情况下不需要使用
参考博客:http://www.cnblogs.com/edisonchou/p/7247990.html