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

中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散。

游戏中的很多系统内部需要互相调用,如果歌系统之间直接调用,逻辑会变得很复杂。采用中介者模式,让中介则负责调用所有的系统,子系统只需要和中介者交互。

中介者模式针对模块内部,各个系统之间相互调度。

缺点:由于中介者控制了集中化,所以交互的复杂性变为了中介者的复杂性。

namespace MdeiatorMode {
    //Mediator 抽象中介者类
    //定义一个抽象的发送消息方法,得到对象和发送信息
    abstract class UnitedNations {
        //declare
        public abstract void Declare(string message, Country country);
    }
    abstract class Country {
        protected UnitedNations mediator;

        public Country(UnitedNations mediator) {
            this.mediator = mediator;
        }
    }
    class USA : Country {
        public USA(UnitedNations mediator) : base(mediator) { }
        public void Declare(string message) {
            mediator.Declare(message, this);
        }
        public void GetMessage(string message) {
            Console.WriteLine("USA get message:" + message);
        }
    }
    class China : Country {
        public China(UnitedNations mediator) : base(mediator) { }
        public void Declare(string message) {
            mediator.Declare(message, this);
        }
        public void GetMessage(string message) {
            Console.WriteLine("China get message:" + message);
        }
    }
    class UnitedNationsSecurityCouncil : UnitedNations {
        private USA usa;
        private China china;

        public USA Usa {
            set { usa = value; }
        }
        public China China {
            set { china = value; }
        }
        //重写声明,事项对象间的通信
        public override void Declare(string message, Country country) {
            if (country == usa) {
                china.GetMessage(message);
            }
            else {
                usa.GetMessage(message);
            }
        }
    }
    class Program {
        static void Main(string[] args) {
            UnitedNationsSecurityCouncil unsc = new UnitedNationsSecurityCouncil();

            USA u = new USA(unsc);
            China c = new China(unsc);

            unsc.Usa = u;
            unsc.China = c;

            u.Declare("usa message");
            c.Declare("china message");
            Console.Read();
        }
    }
}
发布了107 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/love_phoebe/article/details/104077871
今日推荐