【专业技术】软件架构--中介模式介绍

1. 故事

公司组织去奥林匹克公园team building,主题是“把信送给加西亚”。头天,组长组织大家秘密商讨,主题时如何夺取第二天的ipad2大奖的计划。由于人员众多,组长怕大家不认识,要求每个人用一句话形容自己,然后顺时针把剩下的所有人描述自己的话再重复出来,这样经过2轮,名字基本记住了,虽然免不了张冠李戴:比如GC同学异常肯定的把硬件部的HQ称为圆圆的JY引的大家哈哈大笑。

第二天,送信活动开始了。GC自告奋勇的充当马前卒,跑到前面去寻找路途中的挑战:一尊佛像。结果呢,他没有看要求的任务书,跑到终点去了。更要命的是,除了组秘CYY mm之外,没人知道他的手机,大家七嘴八舌的讨论如何尽快找他回来,通话全部是靠组秘一个人,当然了,白白浪费全组的宝贵时间。

集体中每个人之间通信是很麻烦的,需要把所有人的手机输入到自己的通信录中。没有人这么干,因为太麻烦了。

2. 中介(者)模式

角色之一:中介(组秘CYY)

角色之二:同事

协作:

中介拥有每个同事的联系方式,每个同事只拥有中介的联系方式。同事之间的通信全靠中介中转。

3. 好处

大大降低了同事之间通信的复杂度,每个人只需要和中介通信,中介传递同事之间的消息。

4. 实现

class Program

{

private static void Main(string[] args)

{

}

}

public abstract class Colleague

{

private Mediator mediator;

protected Colleague(Mediator mediator)

{

this.mediator = mediator;

}

public Mediator GetMediator()

{

return mediator;

}

}

public class ConcreteColleagueA : Colleague

{

public ConcreteColleagueA(Mediator mediator):base(mediator)

{

}

public void SomeOperation()

{

base.GetMediator().Change(this);

}

}

public class ConcreteColleagueB : Colleague

{

public ConcreteColleagueB(Mediator mediator)

: base(mediator)

{

}

public void SomeOperation()

{

base.GetMediator().Change(this);

}

}

public interface Mediator

{

void Change(Colleague colleague);

}

public class ConcreteMediator

{

private ConcreteColleagueA colleagueA;

private ConcreteColleagueB colleagueB;

public void SetConcreteColleagueA(ConcreteColleagueA colleague)

{

colleagueA = colleague;

}

public void SetConcreteColleagueB(ConcreteColleagueB colleague)

{

colleagueB = colleague;

}

public void Changed(Colleague colleague)

{

}

}

部分实现参考烧点饭的博客。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玉树芝兰

互联网上的时光机器

移动互联网时代,搞社会研究的人总是需要从网络采集各种数据。假设你本周的任务是搜集世界主流媒体对某一主题的报道。你好不容易学习并且掌握了搜索引擎的各种窍门后,辛辛...

671
来自专栏程序员互动联盟

【程序人生】糟糕的程序员你会做?

一个好程序员不好做,那么一个糟糕的程序应该不难吧! 秘籍一:让你看不懂我写的是什么 都说让人看不懂的代码,才是牛逼代码。一类是算法高深,一般人实在是看不懂。另一...

3238
来自专栏非著名程序员

编程不息,Bug 不止

今天不想聊别的,就想聊点 Bug,是不是感觉我有点傲娇呢?昨天大家的留言我都一一仔细看完了,看完之后,就想到了一句话:生命不息,坎坷不止。2016年大家真的是被...

1749
来自专栏Debian社区

国内首个IPv6公共DNS发布:亦能解析IPv4

去年,相关部门印发《推进互联网协议第六版(IPv6)规模部署行动计划》,提出要在2018年末实现国内IPv6活跃用户数达到2亿,2020年达到5亿。随后,阿里云...

1973
来自专栏FreeBuf

走进科学:黑客叔叔带你玩转LED_Hacking

Hi,黑客叔叔又跟大家见面了! 上次的《走近科学:如何搞定各种各样的终端机》文章,看来不少小伙伴们都响应了,也晒了很多图给我,并且都没有造成破坏,而是提交给了负...

18910
来自专栏程序人生

Botwall - Bot Firewall??

Mountain View的El Camino Real和Castro交界的地方,有一栋大楼,地址是:800 W El Camino Real,里面入驻了不少创...

3617
来自专栏腾讯数据中心

如何避免数据中心冷却水缺水?

导语 冷却水在制冷系统中起到十分重要的作用,是冷量传递的媒介。冷却水系统如果发生缺水现象,会产生严重的后果,轻则导致空调送风温度升高,重则导致冷机停机,甚至导...

3403
来自专栏CreateAMind

ROS Industrial

工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟,ROS迅猛发展的过程中,也不断渗入到工业领域,从而产生了一个新的分支——ROS-Indust...

1124
来自专栏Web 开发

新版AH326U盘在几个小时的折腾下,又重新复活了

和宇瞻客服询问半天,得知现在的闪存颗粒,已经单个颗粒可以达到8G容量,所以现在是单贴~ 单贴的直接后果就是,8G的写入速度比旧版双贴的写入速度骤降~

670
来自专栏西枫里博客

关于中文域名续费的骗局

前几天有客户问我,我域名到期了,续费找谁啊?直接把我问的一脸懵逼。续费不是一直找我的吗?我查了下域名到期还早啊,要到2017年4月才到期呢。然后客户说有人打电话...

3304

扫码关注云+社区