概述
在软件构建过程中,经常会出现多个对象互相关联交互的情况,
对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。
在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。
意图
用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
结构图
角色说明:
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 |
10 |
public abstract string
|