中介者模式(C#)

结合各简单的联合国和国家的例子吧。

1、定义一个联合国的接口:

namespace Mediator
{
    abstract class UnitedNation
    {
        public abstract void Declare(string message, Country collegue);
    }
}

2、再定义一个国家类的接口:

namespace Mediator
{
    abstract class Country
    {
        protected UnitedNation mediator;

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

3、美国类

namespace Mediator
{
    class Usa : Country
    {
        public Usa(UnitedNation mediator) : base(mediator)
        {

        }

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

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

4、伊拉克类

namespace Mediator
{
    class Irac : Country
    {
        public Irac(UnitedNation mediator) : base(mediator)
        {

        }

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

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

5、联合国安理会类(这个就是中介者,通过它实现两个国家间的信息传达)

namespace Mediator
{
    class UnitedNationSecurity : UnitedNation
    {
        private Usa colleague1;
        private Irac colleague2;
        public Usa Collegue1 { set { colleague1 = value; } }
        public Irac Colleague2 { set { colleague2 = value; } }

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

6、客户端代码的简单调用

namespace Mediator
{
    class Program
    {
        static void Main(string[] args)
        {
            UnitedNationSecurity unsc = new UnitedNationSecurity();
            Usa c1 = new Usa(unsc);
            Irac c2 = new Irac(unsc);
            unsc.Collegue1 = c1;
            unsc.Colleague2 = c2;
            c1.Declare("不准研发核武器,否则发动战争!");
            c2.Declare("我们没有核武器,也不怕侵略!");
            Console.ReadKey();
        }
    }
}

代码实现的效果:


代码已经是全的可以直接复制使用(最好是自己再敲一遍),没看太明白的话,直接调试运行一遍,保证你懂。

中介者模式的优缺点:

优点:

这点看代码后应该就很清楚了,大大减少了两个国家间的耦合,而是把复杂的逻辑关系判断都放在了中介者(联合国安理会上),相当于中介者的集中控制。

缺点:

其实从优点上就可以得出缺点就是中介者往往会过于复杂,这就是集中控制带来的负面影响。

结语:大家想想,如果世界上的各个国家间的大事能通过联合国这个中介来调节处理,往往能得到一个较好的结果。如果都是国与国间的直接处理,不难想象绝对会牵扯到更多的国家,这就是高耦合带来的很大负面影响。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值