参考文章:
https://www.cnblogs.com/ysw-go/p/5413958.html
定义:
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
uml类图:
模式组成:
- Mediator:中介者。定义一个接口用于与各同事(Colleague)对象通信
- ConcreteMediator:具体中介者。通过协调各同事对象实现协作行为,了解并维护它的各个同事
- Colleague:抽象同事类。主要扶着约束同事对象的类型,并实现一些具体同事类之间的公共功能
- Colleagueclass:具体同事类。每个具体同事类都只需要知道自己的行为即可,但是他们都需要认识中介者
优点:
-
松耦合
中介者模式通过把多个同事对象之间的交互封装到中介对象里面,从而使得同时对象之间松散耦合,基本上可以做到互不依赖。这样一来,同时对象就可以独立的变化和复用,不再“牵一发动全身”
-
集中控制交互
多个同事对象的交互,被封装在中介者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改中介者就可以了。
-
多对多变为一对多
没有中介者模式的时候,同事对象之间的关系通常是多对多,引入中介者对象后,中介者和同事对象的关系通常变为双向的一对多,这会让对象的关系更容易理解和实现。
应用:
- MVC模式(其中C,控制器就是一个中介者,M和V和它打交道)
-
窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象
-
Java.lang.reflect.Method#invoke()
举个栗子: