博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CPP之中介者设计模式
阅读量:4025 次
发布时间:2019-05-24

本文共 1552 字,大约阅读时间需要 5 分钟。

创,转载请注明出处,谢谢!

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)

        {

        }

    }

你可能感兴趣的文章
hibernate------hql总结
查看>>
Spring框架下PropertyPlaceholderConfigurer类
查看>>
Spring的lobhandler
查看>>
struts 标签logic:iterate用法详解
查看>>
Spring+Hibernate中的(FlushMode.NEVER)错误产生及解决
查看>>
spring的BeanUtils.copyProperties用法
查看>>
JAVA读取Oracle中的blob图片字段并显示
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>
利用spring的mock类进行单元测试
查看>>
spring的beanFactory和factoryBean
查看>>
性能测试中用LambdaProbe监控Tomcat Tomcat和Probe的配置
查看>>
Java RMI之HelloWorld篇
查看>>
Oracle 物化视图
查看>>
利用VMware搭建虚拟开发环境及VMware虚拟机上网
查看>>
spring系列之 回调函数的使用
查看>>
Java中的枚举(一)
查看>>