您的位置:首页 > 其它

设计模式学习笔记--Mediator 中介者模式

2009-10-09 19:58 666 查看
我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成。当彼此引用的对象数量比较少时,此时对象之间就为直接交互(点对点)。而当对象的数量增加时,这种直接交互会导致对象之间复杂的、混乱的引用,最后形成一张巨大的网,这就会影响应用程序的可维护性。同时,因为对象之间的高耦合,当一个对象直接引用其他的对象时,缩小了这些对象的复用范围。

因此:我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。

以上的变化反映在下图:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MyMediator

4、具体中介类角色 RealMediator

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MyMediator

2、抽象中介类角色 AbsChatRoom

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MyMediator

4、具体中介类角色 RealChatRoom

Code

#region 聊天室示例

Console.WriteLine();

Console.WriteLine();

Console.WriteLine("---------------聊天室示例-------------");

RealChatRoom room = new RealChatRoom();

AbsParticipant WangJun = new Boy("王军");

AbsParticipant ZhouQiang = new Boy("周强");

AbsParticipant LiWeiDong = new Boy("李卫东");

AbsParticipant YuanHui = new Boy("袁晖");

AbsParticipant SunLing = new Girl("孙玲");

AbsParticipant DenLiLi = new Girl("邓丽丽");

room.Register(WangJun);

room.Register(ZhouQiang);

room.Register(LiWeiDong);

room.Register(YuanHui);

room.Register(SunLing);

room.Register(DenLiLi);

WangJun.Send("孙玲", "你好孙玲"); //此处实质是调用RealChatRoom定义的Send功能来完成Send操作

ZhouQiang.Send("李卫东", "哥们在吗?");

LiWeiDong.Send("周强", "我才上来,今天工作忙不忙?");

YuanHui.Send("孙玲", "昨天看到你哥了");

SunLing.Send("邓丽丽", "作业做完没有?");

DenLiLi.Send("周强", "你是哪里的?");

Console.ReadKey();

#endregion
程序如下图:



运行效果如下:




适用性:


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

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

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

前往:设计模式学习笔记清单
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: