[索引页]
[源码下载]

乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

作者:webabcd

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

示例
有一个Message实体类,某个对象对它的操作有Send()和Insert()方法,现在用一个中介对象来封装这一系列的对象交互。


MessageModel
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Mediator 

        /// <summary> 
        /// Message实体类 
        /// </summary> 
        public class MessageModel 
        { 
                /// <summary> 
                /// 构造函数 
                /// </summary> 
                /// <param name="msg">Message内容</param> 
                /// <param name="pt">Message发布时间</param> 
                public MessageModel(string msg, DateTime pt) 
                { 
                        this._message = msg; 
                        this._publishTime = pt; 
                } 
 
                private string _message; 
                /// <summary> 
                /// Message内容 
                /// </summary> 
                public string Message 
                { 
                        get { return _message; } 
                        set { _message = value; } 
                } 
 
                private DateTime _publishTime; 
                /// <summary> 
                /// Message发布时间 
                /// </summary> 
                public DateTime PublishTime 
                { 
                        get { return _publishTime; } 
                        set { _publishTime = value; } 
                } 
        } 
}
AbstractMessageMediator
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Mediator 

        /// <summary> 
        /// 抽象中介者(Mediator) 
        /// </summary> 
        public abstract class AbstractMessageMediator 
        { 
                /// <summary> 
                /// 注册一个操作Message的对象 
                /// </summary> 
                /// <param name="AbstractMessage">AbstractMessage</param> 
                public abstract void Register(AbstractMessage AbstractMessage); 
 
                /// <summary> 
                /// 发送Message 
                /// </summary> 
                /// <param name="from">来自UserId</param> 
                /// <param name="to">发送到UserId</param> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public abstract string Send(string from, string to, MessageModel mm); 
        } 
}
MessageMediator
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Mediator 

        /// <summary> 
        /// 中介者(ConcreteMediator) 
        /// </summary> 
        public class MessageMediator : AbstractMessageMediator 
        { 
                private Dictionary<string, AbstractMessage> _dictionary = new Dictionary<string, AbstractMessage>(); 
 
                /// <summary> 
                /// 注册一个操作Message的对象 
                /// </summary> 
                /// <param name="abstractMessage">AbstractMessage</param> 
                public override void Register(AbstractMessage abstractMessage) 
                { 
                        if (!_dictionary.ContainsKey(abstractMessage.UserId)) 
                        { 
                                _dictionary.Add(abstractMessage.UserId, abstractMessage); 
                        } 
 
                        abstractMessage.AbstractMessageMediator = this; 
                } 
 
                /// <summary> 
                /// 发送Message 
                /// </summary> 
                /// <param name="from">来自UserId</param> 
                /// <param name="to">发送到UserId</param> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public override string Send(string from, string to, MessageModel mm) 
                { 
                        AbstractMessage abstractMessage = _dictionary[to]; 
                        if (abstractMessage != null) 
                        { 
                                return abstractMessage.Insert(from, mm); 
                        } 
                        else 
                        { 
                                return null; 
                        } 
                } 
        } 
}
AbstractMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Mediator 

        /// <summary> 
        /// 操作Message抽象类(Colleague) 
        /// </summary> 
        public abstract class AbstractMessage 
        { 
                private AbstractMessageMediator _abstractMessageMediator; 
                private string _userId; 
 
                /// <summary> 
                /// 构造函数 
                /// </summary> 
                /// <param name="userId">UserId</param> 
                public AbstractMessage(string userId) 
                { 
                        this._userId = userId; 
                } 
 
                /// <summary> 
                /// UserId 
                /// </summary> 
                public string UserId 
                { 
                        get { return _userId; } 
                } 
 
                /// <summary> 
                /// 中介者 
                /// </summary> 
                public AbstractMessageMediator AbstractMessageMediator 
                { 
                        get { return _abstractMessageMediator; } 
                        set { _abstractMessageMediator = value; } 
                } 
 
                /// <summary> 
                /// 发送Message(由客户端调用) 
                /// </summary> 
                /// <param name="to">发送到UserId</param> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public string Send(string to, MessageModel mm) 
                { 
                        return _abstractMessageMediator.Send(_userId, to, mm); 
                } 
 
                /// <summary> 
                /// 接受Message(由中介者调用) 
                /// </summary> 
                /// <param name="from">来自UserId</param> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public abstract string Insert(string from, MessageModel mm); 
        } 
}
SqlMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Mediator 

        /// <summary> 
        /// Sql方式操作Message(ConcreteColleague) 
        /// </summary> 
        public class SqlMessage : AbstractMessage 
        { 
                /// <summary> 
                /// 构造函数 
                /// </summary> 
                /// <param name="userId">UserId</param> 
                public SqlMessage(string userId) 
                        : base(userId) 
                { 
 
                } 
 
                /// <summary> 
                /// 接受Message(由中介者调用) 
                /// </summary> 
                /// <param name="from">来自UserId</param> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public override string Insert(string from, MessageModel mm) 
                { 
                        return "Sql方式插入Message(" + from + "发送给" + base.UserId + ")" 
                                + " - 内容:" + mm.Message 
                                + " - 时间:" + mm.PublishTime.ToString(); 
                } 
        } 
}
XmlMessage
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Mediator 

        /// <summary> 
        /// Xml方式操作Message(ConcreteColleague) 
        /// </summary> 
        public class XmlMessage : AbstractMessage 
        { 
                /// <summary> 
                /// 构造函数 
                /// </summary> 
                /// <param name="userId">UserId</param> 
                public XmlMessage(string userId) 
                        : base(userId) 
                { 
 
                } 
 
                /// <summary> 
                /// 接受Message(由中介者调用) 
                /// </summary> 
                /// <param name="from">来自UserId</param> 
                /// <param name="mm">Message实体对象</param> 
                /// <returns></returns> 
                public override string Insert(string from, MessageModel mm) 
                { 
                        return "Xml方式插入Message(" + from + "发送给" + base.UserId + ")" 
                                + " - 内容:" + mm.Message 
                                + " - 时间:" + mm.PublishTime.ToString(); 
                } 
        } 
}
Test
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
 
using Pattern.Mediator; 
 
public partial class Mediator : System.Web.UI.Page 

        protected void Page_Load(object sender, EventArgs e) 
        { 
                AbstractMessageMediator messageMediator = new MessageMediator(); 
 
                AbstractMessage user1 = new SqlMessage("user1"); 
                AbstractMessage user2 = new SqlMessage("user2"); 
                AbstractMessage user3 = new XmlMessage("user3"); 
                AbstractMessage user4 = new XmlMessage("user4"); 
 
                messageMediator.Register(user1); 
                messageMediator.Register(user2); 
                messageMediator.Register(user3); 
                messageMediator.Register(user4); 
 
                Response.Write(user1.Send("user2", new MessageModel("你好!", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(user2.Send("user1", new MessageModel("我不好!", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(user1.Send("user2", new MessageModel("不好就不好吧。", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(user3.Send("user4", new MessageModel("吃了吗?", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(user4.Send("user3", new MessageModel("没吃,你请我?", DateTime.Now))); 
                Response.Write("<br />"); 
                Response.Write(user3.Send("user4", new MessageModel("不请。", DateTime.Now))); 
                Response.Write("<br />"); 
        } 
}
运行结果
Sql方式插入Message(user1发送给user2) - 内容:你好! - 时间:2007-5-19 23:43:19
Sql方式插入Message(user2发送给user1) - 内容:我不好! - 时间:2007-5-19 23:43:19
Sql方式插入Message(user1发送给user2) - 内容:不好就不好吧。 - 时间:2007-5-19 23:43:19
Xml方式插入Message(user3发送给user4) - 内容:吃了吗? - 时间:2007-5-19 23:43:19
Xml方式插入Message(user4发送给user3) - 内容:没吃,你请我? - 时间:2007-5-19 23:43:19
Xml方式插入Message(user3发送给user4) - 内容:不请。 - 时间:2007-5-19 23:43:19

参考
http://www.dofactory.com/Patterns/PatternMediator.aspx

OK
[源码下载]

 
本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344571,如需转载请自行联系原作者

乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)相关推荐

  1. PHP设计模式之中介者模式(Mediator Pattern)了解下

    咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互, ...

  2. [设计模式] 17 中介者模式 Mediator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...

  3. 设计模式之中介者模式---Mediator Pattern

    模式的定义 中介者模式定义如下: Define an object that encapsulates how a set of objects interact.Mediator promotes ...

  4. 【23种设计模式】中介者模式(Mediator Pattern) .Net Core实现

    文章目录 简介 伪代码演示 简单实现 使用MediatR实现中介者模式 来源 简介 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类 ...

  5. 设计模式之中介者模式(Mediator Pattern)

    中介者模式定义 Define an object that encapsulates how a set of objects interact. Mediator promotes loose co ...

  6. 设计模式-中介者模式(Mediator Pattern)

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

  7. java中介者模式例子_Java中介者模式(Mediator Pattern)

    本篇文章帮大家学习java中介者模式(Mediator Pattern),包含了Java中介者模式(Mediator Pattern)使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以 ...

  8. 7.7 中介者模式(Mediator Pattern)

    一. 定义 在现实生活中,常出现多个对象之间存在复杂的交互关系,这种交互关系常常是"网状结构",要求每个对象都必须知道它需要交互的对象.如:每个人必须记住他所有朋友的电话,若朋友中 ...

  9. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. Luogu P6055 [RC-02] GCD(莫比乌斯反演,杜教筛)(这题乐死我了,真就图一乐呗)
  2. 测试在MicroPython中对于main.py进行修改
  3. boot spring 怎么执行hql_Intellij如何使用Spring Boot正确配置hql。现在我得到持久性QL查询已进行错误检查...
  4. win7如何删除mariadb
  5. python difflib模块_Python一起来找茬—difflib模块
  6. 4G模块使用记录SIMCOM7070
  7. Html5——WebSocket
  8. tarjan 算法模板
  9. Linux socket程序演示
  10. visio安装包大小,怎么判断安装那个版本?
  11. 【C++课程设计】基于单向链表的通讯录管理程序
  12. Gartner发布《2021年RPA魔力象限》,两家中国企业首次入选,开创历史!
  13. 20190401每周精品之认知
  14. 第35讲:Xposed+模拟器的详细使用
  15. 高德地图之周边搜索和路线规划
  16. 小米手机夜间模式在哪设置?仅需2个步骤
  17. 数据立方体的基本计算
  18. loj534. 「LibreOJ Round #6」花团
  19. 苹果快捷指令——支付宝小程序一键直达:URL Scheme 跳转
  20. 【ELT.ZIP】OpenHarmony啃论文俱乐部——多维探秘通用无损压缩

热门文章

  1. 一个基于SpringBoot + Mybatis + Vue的代码生成器
  2. 让人头痛的大事务问题到底要如何解决?
  3. Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制
  4. SpringBoot第八篇:springboot整合mongodb
  5. 春节假期是弯道超车的好机会!
  6. 机器学习神器Scikit-Learn保姆教程!
  7. CMU赵越:关于数据挖掘的分享!
  8. 从Transformer到BERT模型
  9. 告别2019:属于深度学习的十年,那些我们必须知道的经典
  10. 朴素贝叶斯(NaïveBayes)