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

中介者模式(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();
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值