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

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 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

2016年1月编程语言排行榜:Java荣获2015年度冠军

2606
来自专栏老九学堂

TIOBE 2016年8月编程语言排行榜:C语言达到历史新低

编程语言排行榜 TOP20 榜单 ? C语言本月的占比仅为11.303%,这个数字达到了从2001年TIOBE开榜以来的历史最低。 C语言衰落的主要原因在于:首...

3319
来自专栏CDA数据分析师

【收藏】55 款可视化分析工具,优秀数据分析师必备!

俗话说的好:工欲善其事,必先利其器!一款好的工具可以让你事半功倍,尤其是在大数据时代,更需要强有力的工具通过使数据有意义的方式实现数据可视化,还有数据的可交互性...

2285
来自专栏数据小魔方

突然有一个大胆的想法,提前分享给大家

也是由于前段时间工作中遇到一个很小文本分析的需求,虽然最后不了了之了,但是却勾起来自己对文本分析的极大兴趣。

501
来自专栏知晓程序

这款简洁又漂亮的小程序,帮你做好时间管理

如何利用有限的 8 小时,高效完成手头的工作,让杂乱无章的生活变得井井有条?这是每个人都值得思考的问题。

402
来自专栏java一日一条

TIOBE:2016年全球1月编程语言排行榜 Java成2015年度语言

Java的上涨齐头并进,Objective-C的跌幅(-5.88%)。苹果公司宣布Swift替换Objective-C的前一段时间是今年秋天的主要原因。据预计,...

412
来自专栏钱塘大数据

用Excel画画“封神”,77岁日本老人成网红

“Excel就像一把天山寒铁淬炼而成的杀猪刀,本身已经很厉害,但具体有多厉害,取决于用它的人。它最牛逼的地方在于,它不是小李飞刀也不是轩辕剑——需要练个10年8...

3545
来自专栏一名叫大蕉的程序员

我差不多,哦不我已经是个废人了No.4

我是小蕉。 好吧大家都说技术看不懂,那好吧,今天一点技术都没有,主要谈谈一个人来如何懒起来。 前几日因为要部署一个ElasticSearch集群...

18110
来自专栏老九学堂

TIOBE 10月编程语言排行榜

距离2016年度编程语言的公布只剩3个月了,谁将夺得桂冠? 与去年同期相比,2016年只有Go语言和Groovy语言的增长率超过了1%。 需要注意的是,Groo...

2766
来自专栏钱塘大数据

55 款必备可视化分析工具,让你工作事半功倍!

俗话说的好:工欲善其事,必先利其器!一款好的工具可以让你事半功倍,尤其是在大数据时代,更需要强有力的工具通过使数据有意义的方式实现数据可视化,还有数据的可交互性...

3346

扫描关注云+社区