1. 定义
中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
简单来说,就是对象之间彼此不联系,而是通过中介来间接联系的,举个例子,联合国就是一个中介,没有联合国之前,各个国家成立彼此的组织,有联合国之后,所有国家与联合国联系,通过联合国与其他国家进行发声
或者再比如,房东和租客是不认识的,租客找到房东租房子是通过中介来的,租客先找到中介,表达意愿,然后中介再联系相应的房东,达到了间接联系的作用
2. 使用背景
当我们有许多对象彼此纠缠联系时,这就要求对象之间需要知道其他所有对象,尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性了
因为大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了
这个时候,可以运用迪米特法则,即如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者(中介)转发这个调用。
也就是中介者模式的运用
在上述联合国的例子里,国与国之间完全可以通过‘联合国’这个中介者来发生关系,而不用直接通信。
通过中介者对象,可以将系统的网状结构变成以中介者为中心的星形结构,每个具体对象不再通过直接的联系与另一个对象发生相互作用,而是通过‘中介者’对象与另一个对象发生相互作用。中介者对象的设计,使得系统的结构不会因为新对象的引入造成大量的修改工作
3. 中介者模式的结构图与模板
4. 个人用流程图理解
5. 使用中介者模式的例子
题目:
联合国组织旗下的安理会,希望通过其安理会本身以中介的身份对美国和伊拉克进行交流,而不是让其彼此通信
结构图:
代码:
- 抽象联合国类
//抽象联合国类
abstract class UniteNations
{
public abstract void Declare(string message,Country country);
}
- 具体中介