当前位置:编程学习 > asp >>

步步为营 .NET 设计模式学习笔记 二十、Mediator(中介者模式)

概述

在软件构建过程中,经常会出现多个对象互相关联交互的情况,
对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。
在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。

意图
用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

结构图

alt

角色说明:

Mediator:抽象调停者角色,它定义出同事对象到调停者对象得接口,这个角色一般由Java抽象类实现
ConcreteMediator:具体调停者模式,从抽象调停者继承,实现了超类所声明的事件方法,它从具体同事对象接收消息,向具体同事对象发出命令.
Colleague:抽象同事类角色,它定义了调停者同事对象的接口,它只知道调停者而不知道其余同事对象.
colleague1、colleague2:具体同事类角色,从抽象同事类继承而来,每个具体同事类都知道本身在小范围内的行为,而不知道它在大范围内的目的.

 

生活中的例子

现在大街上,有很多婚姻中介,一般是单身男女把各自的资料存放在婚介处,单身男女自己选择自己有意对像进行比对,如果某对男女互想感兴趣,则安排它们见面交谈,感觉良好就速成,不好就继续配对.

 

示例用例图

刚来到这个地方工作时,就面临租房问题,当时我人生地不熟,找了个中介,给我找了个离公司300米左右的单间,根据这个,我们设计了中介者模式的用例图,用例图如下:

image

 

代码设计:

先创建RentingMediator.cs:

html#viewSource" commandName="viewSource" highlighterId="highlighter_789982">view sourceprint?
1 public abstract  class RentingMediator
2 {
3     public abstract string Notice(string message,House house);
4 }

 

再创建House.cs:

view sourceprint?
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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,