zoukankan      html  css  js  c++  java
  • 《大话设计模式》学习笔记21:中介者模式

      

    同事间接收消息示例:

      

    1.Mediator:

        public abstract class Mediator
        {
            public abstract void Send(string message, Colleague colleague);
        }

    2.Colleague:

        public abstract class Colleague
        {
            protected Mediator mediator;
            
            public Colleague(Mediator mediator)
            {
                this.mediator = mediator;
            }
        }

    3.ConcreteMediator:

        public class ConcreteMediator:Mediator
        {
            //需要了解所有的具体对象:
            public ConcreteColleague1 colleague1 { private get; set; }
            public ConcreteColleague2 colleague2 { private get; set; }
            public override void Send(string message, Colleague colleague)
            {
                if(colleague==colleague1)
                {
                    colleague2.Notify(message);
                }
                else
                {
                    colleague1.Notify(message);
                }
            }
        }

    4.ConcreteColleague:

        public class ConcreteColleague1:Colleague
        {
            public ConcreteColleague1(Mediator mediator)
                : base(mediator)
            {
    
            }
            public void Send(string message)
            {
                mediator.Send(message, this);
            }
            public void Notify(string message)
            {
                Console.WriteLine("同事1得到信息:" + message);
            }
        }
        public class ConcreteColleague2 : Colleague
        {
            public ConcreteColleague2(Mediator mediator)
                : base(mediator)
            {
    
            }
            public void Send(string message)
            {
                mediator.Send(message, this);
            }
            public void Notify(string message)
            {
                Console.WriteLine("同事2得到信息:" + message);
            }
        }

    5.客户端代码:

        class Program
        {
            static void Main(string[] args)
            {
                ConcreteMediator mediator = new ConcreteMediator();
    
                ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
                ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
    
                mediator.colleague1 = colleague1;
                mediator.colleague2 = colleague2;
    
                colleague1.Send("吃过饭了吗?");
                colleague2.Send("没呢,你打算请客?");
            }
        }

      

      优点:

        1.Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague和Mediator;

        2.由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

      缺点:由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。

      中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为而又不想生成太多子类的场合。

      中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了“多对多”交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。

  • 相关阅读:
    C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)
    非软件行业公司自建软件开发部门能力不强的原因分析
    编程经验点滴----巧妙解决 Oracle NClob 读写问题
    编程经验点滴----在 Oracle 数据库中保存空字符串
    这几天上海移动网络可以直接打开 Google Play 了
    品牌电脑硬盘损坏后,使用MediaCreationTool从微软官方下载正版Windows到USB做安装盘
    编程经验点滴----使用接口表保存可能并发的业务,然后顺序处理
    生产打印系统的一些汇总--商业合同方面
    生产打印系统的一些汇总--概要
    外观模式
  • 原文地址:https://www.cnblogs.com/walden1024/p/4529107.html
Copyright © 2011-2022 走看看