中介者模式定义如下:
Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping object from referring to each other explicitly,and it lets you vary their interaction independently.
用一个中介对象封装一系列对象的交互,中介者促使各对象不需要显示的相互作用,并且你可以独立的改变他们之间的交互。
在网络拓扑图中,有网状拓扑图和星状拓扑图,当类图之间的关系是网状图时,就建议采用中介者模式,是类图之间的关系改为星状图。
中介者通用类图如下:
8.png
中介者模式涉及的三个角色如下:
1、Mediator:抽象的中介者角色,定义统一的接口,用于各个Colleague之间的通信
2、ConcreteMediator:具体中介者角色:具体的中介者角色实现Mediator的接口,完成各个同事类之间的通讯,因此他必须依赖于各个同事类。
3、Colleague:同事角色,每个同事角色都知道中介者角色,而且与其他同事角色进行通信的时候一定要通过中介者角色。每个同事角色的行为(方法)分为两种:
第一种:自己完成的事情,如果不依赖与其他同事类,只需要自己执行即可,可以称为自发行为,Self-Method
第二种:需要依赖于其他同事,需要其他同事执行相应的方法才能完成的操作,可以称为依赖方法,Dep-Method
相互依赖的注入方式:
根据上面所述,中介者中会有同事类,同事类中也会包含中介者类,那么建议同事类中的中介者采用构造方法注入,而中介者中的同事类采用setter方法注入。这是因为同事类中必须有中介者,而中介者类中并不是包含所有的同事类。
中介者模式的优点:
中介者模式减少了类之间的依赖,把原有的类之间的多对多的依赖改为了多对一的依赖,降低了彼此间的耦合。
中介者模式的缺点:
由于将多个依赖都集中于中介者类中,所以随着同事类的增多,中介者类会急剧的膨胀。
中介者模式使用场景:
多个类之间相互依赖耦合,形成了网状结构,建议使用中介者模式,进行解耦,将依赖转移到一个类中。
网友评论