设计模式之中介者模式(Mediator)
概念
Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。
动机
在软件架构过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。
在这种情况下,我们可以使用一个中介对象管理对象间的关联关系,避免互相交互的对象之间的紧耦合引用关系,从而更好的抵御变化。
设计方式
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用(编译时依赖->运行时依赖),从而降低耦合;而且可以独立地改变它们之间的交互。Mediator抽象中介者
中介者类的抽象父类。
concreteMediator
具体的中介者类。
Colleague
关联类的抽象父类。
concreteColleague
具体的关联类。
适用于:
用一个中介对象,封装一些列对象(同事)的交换,中介者是各个对象不需要显示的相互作用,从而实现了耦合松散,而且可以独立的改变他们之间的交换。
最核心的时colleague之间没有依赖关系(本来是需要直接依赖的),colleague和Mediator之间是双向依赖关系,colleague之间不再产生任何关系,达到依赖的解耦
模式优点
1,将系统按功能分割成更小的对象,符合类的最小设计原则
2,对关联对象的集中控制
3,减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则
,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4,有利于提高类的重用性
要点总结
将多个对象间复杂的关联关系解耦,Mediator模式将多个对象间的控制逻辑进行集中管理,变“多个对象和一个中介关联”,简化了系统的维护,低于了可能的变化
随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂。这时候可以对Mediator对象进行分解处理
Facade模式是解耦系统间的对象关联关系;Mediator模式是解耦系统内各种对象之间的关联关系
Proxy是解决两个对象本来是可以直接依赖的,但是由于某种原因(安全原因、分布式。。。),所以必须拆开,本来A是直接访问B的,但是现在建立B的Proxy,B的Proxy在内部在去实现对B的一些分布式、安全等控制。