步步为营 .NET 设计模式学习笔记 二十、Mediator(中介者模式)
概述
在软件构建过程中,经常会出现多个对象互相关联交互的情况,
对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。
在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。意图
用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。结构图
角色说明:
Mediator:抽象调停者角色,它定义出同事对象到调停者对象得接口,这个角色一般由Java抽象类实现
ConcreteMediator:具体调停者模式,从抽象调停者继承,实现了超类所声明的事件方法,它从具体同事对象接收消息,向具体同事对象发出命令.
Colleague:抽象同事类角色,它定义了调停者同事对象的接口,它只知道调停者而不知道其余同事对象.
colleague1、colleague2:具体同事类角色,从抽象同事类继承而来,每个具体同事类都知道本身在小范围内的行为,而不知道它在大范围内的目的.
生活中的例子
现在大街上,有很多婚姻中介,一般是单身男女把各自的资料存放在婚介处,单身男女自己选择自己有意对像进行比对,如果某对男女互想感兴趣,则安排它们见面交谈,感觉良好就速成,不好就继续配对.
示例用例图
刚来到这个地方工作时,就面临租房问题,当时我人生地不熟,找了个中介,给我找了个离公司300米左右的单间,根据这个,我们设计了中介者模式的用例图,用例图如下:
代码设计:
先创建RentingMediator.cs:
1
public
abstract
class
RentingMediator
2
{
3
public
abstract
string
Notice(
string
message,House house);
4
}
再创建House.cs:
01
public
abstract
class
House
02
{
03
protected
RentingMediator mediator;
04
05
public
House(RentingMediator rentingMediator)
06
{
07
this
.mediator = rentingMediator;
08
}
09