设计模式之中介者模式

来源:互联网 发布:nginx安装指定配置目录 编辑:程序博客网 时间:2024/06/07 06:10

       各位好,之前有个电视剧叫《我的男闺蜜》,主角就是在婚介所工作的男媒婆。想当年俺姐姐的相亲大会,也是靠媒婆啊!大家也知道这个相亲的流程吧(没吃过猪肉还没见过猪跑么?),女方这边有个如花似玉的姑娘,女方家长就得从这么多合适的男方家庭中找到顶天立地的帅哥汉子,这就得有个中介者——媒婆。即使男女双方家庭已经订了,那也得有个中间传话的媒婆,来代替问一些问题。所以就有个设计模式叫中介者模式。

定义:

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

结构图:



那下边来说一下相亲大会流程的模式:

代码分析:

    ///相亲中心类,相当于Mediator类    abstract class MarriageService    {        //定义一个抽象的发送消息方法        public abstract void Send(string message,Family colleague);    }    ///家庭类,相当于Colleague类    abstract class Family    {        protected MarriageService mediator;        public Family (MarriageService mediator)        {            this.mediator = mediator;   //得到中介者对象        }    }    ///女方家庭类,相当于ConcreteColleague1类    class FemaleFamily :Family    {        public FemaleFamily (MarriageService mediator):base(mediator)        { }        //发出信息        public void Send(string message)        {            mediator.Send(message, this);        }        //获得信息        public void GetMessage(string message)        {            Console.WriteLine("女方获得男方的信息:" + message);        }    }    ///男方家庭类,相当于ConcreteColleague2类    class MaleFamily:Family    {        public MaleFamily (MarriageService mediator):base(mediator )        { }        //发出信息        public void Send(string message)        {            mediator.Send(message, this);        }        //获得信息        public void GetMessage(string message)        {            Console.WriteLine("男方获得女方的信息:" + message);        }    }    ///媒婆类,相当于ConcreteMediator    class Meipo:MarriageService    {        //媒婆了解所有的参加相亲的家庭        private FemaleFamily colleague1;        private MaleFamily colleague2;        public FemaleFamily Colleague1        {            set { colleague1 = value; }        }        public MaleFamily Colleague2        {            set { colleague2 = value; }        }        //根据对象做出选择的发出信息        public override void Send(string message, Family colleague)        {            if (colleague==colleague1)            {                colleague2.GetMessage(message);            }            else            {                colleague1.GetMessage(message);            }        }    }
客户端:
        static void Main(string[] args)        {            Meipo mp = new Meipo();            //让具体家庭类认识中介者对象(媒婆)            FemaleFamily girl = new FemaleFamily(mp);            MaleFamily boy = new MaleFamily(mp);            //让媒婆认识各个具体家庭            mp.Colleague1 = girl;            mp.Colleague2 = boy;            //发出信息            girl.Send("彩礼给多少?");            boy.Send("呵呵!");            Console.Read();        }
运行结果:


总结:

中介者模式一般应用于一组定义良好的对象但是以复杂的方法进行的通信的场合。

优点:

1、Mediator的运用,减少了各个具体的Colleague的耦合,顺应了迪米特原则。

2、把对象之间的协作进行了抽象,将中介封装在一个对象中,这样关注的对象就转移到他们之间的交互上,也就是站在一个更宏观的角度看待问题。

缺点:

1、由于ConcreteMediator控制了集中化,于是把对象间交互的复杂性变为了中介者的复杂性,也就使得中介者会变得比任何一个ConcreteColleague都复杂了。


0 0
原创粉丝点击