前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【专业技术】软件架构--中介模式介绍

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

作者头像
程序员互动联盟
发布2018-03-12 11:43:08
6280
发布2018-03-12 11:43:08
举报

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)

{

}

}

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档