基于设计模式的学习之旅-----中介者(附源码)

          基于设计模式的学习之旅-----中介者

1、初识中介者

那些年,我们一起上过的大学,班级里有班长,有团书记。想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上两个同学之间也可惜沟通啊,沟通一下,院里哪个女生,哪个帅哥呀~~~如果没有QQ的话,大概就是下面的情景:

 

哎呀呀,看看这个乱那。如果同学的数目多起来就会变成网状的结构啦。原本把一个系统分割成一些对象是可以增强复用性的,但是现在的情况是,这些兑现之间存在着大量的联系,耦合性极高。这是很不利于复用的,同时这种情况使得系统的灵活性大大的降低,使得对系统的扩展很难,要是新转来一个学生的话,要改动的地方就多了去了

如果现在可以使用QQ,那么可以采用另一种方式设计这个系统呢,比如做成星形的结构

看看这种星形结构网状结构的区别吧,显然采用星形结构就可以避免上面的网状结构存在的问题了,实际上这里的QQ就是指的是中介,这样一来每个学生对象就不用存在耦合了,同学之间需要交流可以通过一个QQ群。

2、什么是中介者

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从

而使其耦合松散,而且可以独立地改变它们之间的交互。

3、模式结构图

4、模式代码事例

场景:新年快到了,公司要给每位员工送年货。当然,公司不可能直接消耗人力资源自己往每个员工家里送物品,所以收集了每个员工的一些信息,通过快递公司为其送出物品。

 

41涉及到的类,以及类图

ExpressMediator(抽象的中介者)EMSExpressMediator(具体的中介者EMS快递)Colleage(抽象的同事类)Company(具体的同事类公司)Person(具体的同事类员工)

42具体的代码实现

ExpressMediator(抽象的中介者)

 

EMSExpressMediator(具体的中介者EMS快递)

 

 

Colleage(抽象的同事类)

 

 

Company(具体的同事类公司)

 

 

Person(具体的同事类员工)

43事例输出结果

 

 

5、模式参与者

中介者(Mediator,如:ExpressMediator)

具体中介者(ConcreteMediator,如EMSExpressMediator)

同事类(Colleague,如CompanyPerson)

6、模式优缺点

A、减少了子类生成

B、它将各C o l l e a g u e解耦

C、它简化了对象协议

D、它对对象如何协作进行了抽象

E、它使控制集中化

7、模式适用性

A、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理

B、一个对象引用其他很多对象并且直接与这些对象通信 ,导致难以复用该对象

C、想定制一个分布在多个类中的行为,而又不想生成太多的子类

 

 

点击下载“文档以及源码下载

 

欢迎转载,请注明出处“http://www.cnblogs.com/luxiaofeng54/archive/2013/04/09/3010453.html

 

 

 

posted on 2013-04-09 16:59  陆晓峰  阅读(972)  评论(0编辑  收藏  举报

导航