原创,转载请注明出处,谢谢!
1 故事
公司组织去奥林匹克公园team building,主题是“把信送给加西亚”。头天,组长组织大家秘密商讨,主题时如何夺取第二天的ipad2大奖的计划。由于人员众多,组长怕大家不认识,要求每个人用一句话形容自己,然后顺时针把剩下的所有人描述自己的话再重复出来,这样经过2轮,名字基本记住了,虽然免不了张冠李戴:比如GC同学异常肯定的把硬件部的HQ称为圆圆的JY引的大家哈哈大笑。
第二天,送信活动开始了。GC自告奋勇的充当马前卒,跑到前面去寻找路途中的挑战:一尊佛像。结果呢,他没有看要求的任务书,跑到终点去了。更要命的是,除了组秘CYY mm之外,没人知道他的手机,大家七嘴八舌的讨论如何尽快找他回来,通话全部是靠组秘一个人,当然了,白白浪费全组的宝贵时间。
集体中每个人之间通信是很麻烦的,需要把所有人的手机输入到自己的通信录中。没有人这么干,因为太麻烦了。
2 中介(者)模式
角色之一:中介(组秘CYY)
角色之二:同事
协作:
中介拥有每个同事的联系方式,每个同事只拥有中介的联系方式。同事之间的通信全靠中介中转。
3 好处
大大降低了同事之间通信的复杂度,每个人只需要和中介通信,中介传递同事之间的消息。
4 实现
classProgram
{
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(Mediatormediator):base(mediator)
{
}
public void SomeOperation()
{
//在需要跟其他同事通信的时候,通知中介者对象
base.GetMediator().Change(this);
}
}
public class ConcreteColleagueB : Colleague
{
public ConcreteColleagueB(Mediatormediator)
: 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 voidSetConcreteColleagueA(ConcreteColleagueA colleague)
{
colleagueA = colleague;
}
public voidSetConcreteColleagueB(ConcreteColleagueB colleague)
{
colleagueB = colleague;
}
public void Changed(Colleaguecolleague)
{
}
}