中介者(Mediator)模式
中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互
了解《迪米特法则》的朋友就知道,迪米特法则说的就是:一个对象应当对其它对象有尽可能少的了解
迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用性才可以提高。
Mediator: 抽象中介者, 提供一个传递双方的方法 abstract void Send(string message, Colleague colleague),所以需要Colleague 买卖双方的抽象实例。
ConcreteMediator: 具体中介者,它的作用就是买卖双方的桥梁,所以它中介需要有 买卖双方的具体实例。
所以就定义ConcreteColleague1 Colleague1,ConcreteColleague2 Colleague2 买卖双方的一个属性,它就是Colleague1 Colleague2 之间的桥梁。
Colleague: 抽象买卖商人,他们之间的传递 是靠中介者来完成的所以 需要Mediator mediator中介对象构造函数Colleague(Mediator mediator)。
ConcreteColleague1: 具体买家1,自然也知道他委托的中介是谁,ConcreteColleague1(Mediator mediator)。
//实例一个 m 中介者。
ConcreteMediator m = new ConcreteMediator();
//实例 买家 卖商家,他们的中介者都是m
ConcreteColleague1 c1 = new ConcreteColleague1(m);
ConcreteColleague2 c2 = new ConcreteColleague2(m); m.Colleague1 = c1;
m.Colleague2 = c2; //买家通过中介 传话给卖家
c1.Send("买家说-房子120W卖不");
//卖家通过中介回复
c2.Send("卖家说-120W你卖我10套?"); Console.ReadLine(); /// <summary>
/// Mediator 抽象中介者
/// </summary>
public abstract class Mediator
{
public abstract void Send(string message, Colleague colleague);
} /// <summary>
/// Colleague 抽象同事类
/// </summary>
public abstract class Colleague
{
protected Mediator mediator;
/// <summary>
/// 构造函数中 得到中介者
/// </summary>
public Colleague(Mediator mediator)
{
this.mediator = mediator;
}
} /// <summary>
/// ConcreteMediator 具体中介者
/// </summary>
public class ConcreteMediator : Mediator
{
public ConcreteColleague1 Colleague1
{ get; set; } public ConcreteColleague2 Colleague2
{ get; set; } public override void Send(string message, Colleague colleague)
{
if (colleague == Colleague1)
{
Colleague2.Notify(message);
}
else
{
Colleague1.Notify(message);
}
}
} /// <summary>
/// 具体买家
/// </summary>
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(Mediator mediator)
: base(mediator)
{ } public void Send(string message)
{
mediator.Send(message, this);
} public void Notify(string message)
{
Console.WriteLine("买家得到信息:" + message);
} } /// <summary>
/// 具体卖家
/// </summary>
public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(Mediator mediator)
: base(mediator)
{ } public void Send(string message)
{
mediator.Send(message, this);
} public void Notify(string message)
{
Console.WriteLine("卖家得到信息:" + message);
}
}
中介者(Mediator)模式的更多相关文章
- 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考
http://www.cnblogs.com/insus/p/4142264.html 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考 首先普世的编程架 ...
- 设计模式C++描述----18.中介者(Mediator)模式
一. 举例 比如,现在中图和日本在关于钓鱼岛问题上存在争端.这时,联合国就会站出来,做为调解者,其实也没什么好调解的,钓鱼岛本来就是中国的,这是不争的事实!联合国也就是个传话者.发言人. 结构图如下: ...
- 设计模式--中介(Mediator)模式
时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...
- Mediator 中介者 协调者模式
简介 定义:用一个[中介者对象]封装一系列的[对象交互],中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介者模式的结构 抽象中介者Mediator:定义好[ ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- Mediator 模式
在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信.在系统比较小的时候,可能对象间的通信不是很多.对象也比较少,我们可以直接硬编码到各个对象的方法 ...
- 【行为型】Mediator模式
中介者模式目的是将对象间的交互封装在一个对象中,从而使用各对象间的相互依赖解耦,并可以独立更改对像间的交互.在实际项目开发过程中,因某些原因(如:业务逻辑处理不当或设计不当等)使得多个不同对象间需要相 ...
- Mediator模式(仲裁者设计模式)
Mediator ? Mediator的意思是"仲裁者""中介者".一方面,当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者.当仲裁者 ...
- Objective-C设计模式——中介者Mediator(对象去耦)
中介者模式 中介者模式很好的诠释了迪米特法则,任意两个不相关的对象之间如果需要关联,那么需要通过第三个类来进行.中介者就是把一组对象进行封装,屏蔽了类之间的交互细节,使不同的类直接不需要持有对方引用也 ...
- 《图解设计模式》读书笔记7-2 Mediator模式
目录 Mediator模式简介 示例程序 示例程序类图 代码 Mediator模式角色和类图 角色 模式类图 思路拓展 简单化 角色复用 Mediator模式简介 Mediator模式即中介者模式,可 ...
随机推荐
- Sqlite数据库中的事务
public void testTrasaction() throws Exception{ PersonSQLiteOpenHelper helper = new PersonSQLiteOpen ...
- FPGA中计数器设计探索
FPGA中计数器设计探索,以计数器为32位为例: 第一种方式,直接定义32位计数器. reg [31:0]count; quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模 ...
- Python 编码机制
python 编码转换 Python的编码机制,unicode, utf-8, utf-16, GBK, GB2312,ISO-8859-1 等编码之间的转换. 常见的编码转换分为以下几种情况: 自动 ...
- Oracle11gR2_ADG管理之resinstate实战
主库上打开闪回 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES 模拟断电 SQL> ...
- winform 如何正确的获取窗体的标题栏高度
最近我需要知道鼠标在一个控件里的相对位置,鼠标相对于屏幕的位置我是可以知道的,所以只要得到控件相对于屏幕的位置,就可以算出鼠标相对于控件的位置了 但是发现有误差 后来经过测试是由于窗体的标题栏高度导致 ...
- vmware 仅主机模式 ip配置
首先关闭防火墙 主机(宿主机器 win7) 虚拟机(xp) 3..重要提示: 如果ping不通首先考虑防火墙的问题!!! vmware配置: nat模式下玩耍: 1. 配置nat的虚拟网卡: 2. ...
- Object c 基础知识
文件类型说明:.h 头文件,用于定义类.实例变量及类中的方法等定义信息(interface). .m 源文件,定义方法体,可实现objce-c和c方法(implementation). .mm c++ ...
- iOS坑爹的could not find any information for class named xxx
关掉项目也无法解决,最后把文件delete掉,然后选“Remove Reference”,这样就不会真正删除文件.接着选“File -> Add Files to ...”添加回来就可以了.
- (java基础)抽象类加泛型的理解
今天在群里问了个基础问题,挨喷了..这更加激起了我对知识的渴望.也在此铭记一下,将来有经验了要对刚入门的童鞋们严格点,简单的东西要自己看...唉,程序员何苦为难程序猿呢.. 接下来简单总结下这个万能的 ...
- Oracle与SQL Server实现表数据同步
将SQLServer2008中的某些表同步到Oracle数据库中,不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. 实例1:SQLServer2008有一个表employ_ ...