中介者模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互

1.美国警告伊拉克

  联合国安全理事会成立,美国伊拉克都加入了理事会。理事会连线美国和伊拉克,在谈判桌上,美国声明:“不准研制核武器,否则要发动战争!”,伊拉克声明:“我们没有核武器,也不怕侵略!”

  定义中介者抽象类--联合国和抽象国家类

    /// <summary>
    /// 联合国(中介者抽象类)
    /// </summary>
    public abstract class Mediator
    {
        /// <summary>
        /// 声明
        /// </summary>
        public abstract void Declare(string message, Country colleague);
    }

    /// <summary>
    /// 抽象国家类
    /// </summary>
    public abstract class Country
    {
        protected Mediator mediator;

        public Country(Mediator mediator)
        {
            this.mediator = mediator;
        }
    }

   定义美国和伊拉克两个国家类,加入联合国

    /// <summary>
    /// 美国
    /// </summary>
    public class USA : Country
    {
        public USA(Mediator mediator) : base(mediator) { }

        public void Declare(string message)
        {
            mediator.Declare(message, this);
        }

        public void GetMessage(string message)
        {
            Console.WriteLine("美国获得对方消息:" + message);
        }
    }

    /// <summary>
    /// 伊拉克
    /// </summary>
    public class Iraq : Country
    {
        public Iraq(Mediator mediator) : base(mediator) { }

        public void Declare(string message)
        {
            mediator.Declare(message, this);
        }

        public void GetMessage(string message)
        {
            Console.WriteLine("伊拉克获得对方消息:" + message);
        }
    }

   定义具体中介者(调停者)--联合国安全理事会

    /// <summary>
    /// 联合国安全理事会
    /// </summary>
    public class ConcreteMediator : Mediator
    {
        public USA USA { get; set; }

        public Iraq Iraq { get; set; }

        public override void Declare(string message, Country colleague)
        {
            if (colleague == USA)
            {
                Iraq.GetMessage(message);
            }
            else
            {
                USA.GetMessage(message);
            }
        }
    }

   开启场景模拟

        static void Main(string[] args)
        {
            //联合国安全理事会成立
            ConcreteMediator UNSC = new ConcreteMediator();

            //美国加入
            USA c1 = new USA(UNSC);

            //伊拉克加入
            Iraq c2 = new Iraq(UNSC);

            //理事会连线美国和伊拉克
            UNSC.USA = c1;
            UNSC.Iraq = c2;

            //美国声明
            c1.Declare("不准研制核武器,否则要发动战争!");

            //伊拉克声明
            c2.Declare("我们没有核武器,也不怕侵略!");
        }

 

posted @ 2015-11-05 14:43  荒古禁地  阅读(190)  评论(0编辑  收藏  举报