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

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

相关文章

来自专栏MessageQueue

2017上海QCon之旅总结(上)

本来这个公众号的交流消息中间件相关的技术的。这周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下。

923
来自专栏郭润增的专栏

微信支付:如何打造移动支付时代的高可用收银系统?

移动支付时代,越来越多的人习惯于不带现金出门,许多支付场景只需要掏出手机就能完成。正因为如此,收银系统的可用性问题也越来越重要。如何打造移动支付时代的高可用收银...

7060
来自专栏腾讯Bugly的专栏

鹅厂揭秘——高端大气的App电量测试

如何评价我们开发出来的应用是耗电还是不耗电,如何测试?这就是我们今天讨论的主题——电量测试,一个在移动应用中新出现的测试类型。 作者简介 ? 袁建发 腾讯智能...

3554
来自专栏青枫的专栏

JavaEE课程概述 && JavaEE基础班课程概述 && JavaEE就业班课程概述

591
来自专栏机器人网

【推荐】非常棒的大数据学习资源

今天为大家推荐一些翻译整理的大数据相关的非常棒的学习资源,希望能给大家一些帮助。 ? 服务编程Akka Toolkit:JVM中分布性、容错事件驱动应用程序的运...

3405
来自专栏ImportSource

异地双活实践笔记

最近恰好在搞异地双活,以下是一个梳理: 基本概念 1、异地容灾。这仅仅是一个冷备的概念。也就是在平时正常的时候,另外一个机房只是当做备份。 2、异地双(多)活...

1.1K7
来自专栏阮一峰的网络日志

DOS的历史

昨日(7月27日),微软公司的DOS操作系统迎来了30岁生日。 DOS是历史上一个划时代的产品,标识着PC(个人电脑)的崛起和普及,对计算机行业影响深远。 只有...

3314
来自专栏小狼的世界

Google SRE 读书笔记 扒一扒SRE用的那些工具

最近花了一点时间阅读了《SRE Goolge运维解密》这本书,对于书的内容大家可以看看豆瓣上的介绍。总体而言,这本书是首次比较系统的披露Google内部SRE运...

892
来自专栏云加新鲜事儿

云端架构师养成之三:微信也在用的消息队列服务

昨天(6月8日),腾讯云技术社区推出的《云端架构师养成系列分享》迎来了第三期,主角是腾讯云的消息服务。本期邀请到的嘉宾是腾讯云资深产品经理张浩和后台开发工程师张...

2558
来自专栏大宽宽的碎碎念

分布式系统如何定位压力问题监控监控什么呢实际的压力问题怎么发生的我用的工具

2796

扫码关注云+社区