中介者模式之我们结婚吧

        非常久曾经,小小少女情怀的我,怀揣一个漂亮的春梦,那就是找一个男孩儿,从心动走到古稀。随着时间的推移,我听到这种话语,你太天真,但是我仍然愿意相信,冰心对铁凝说的那句话。你不要找,你要等。

爱情是美好的。但不是每一个人都能收获自己的爱情。别操心,婚庆公司帮你忙,百合网是中国第一家实名制婚恋服务商,以“帮助亿万中国人拥有幸福的婚姻和家庭”为己任。

2005年5月,百合网正式公布。并在中国首次推出“心灵匹配,成就幸福婚姻”的独特婚恋服务模式。

         2007年3月,百合网成为第一个採用公安部身份认证系统的婚恋站点。百合网领先实行实名制。眼下,已有超过7000万注冊用户在百合网上寻找他们的终生伴侣。今天我们的设计模式就从婚姻公司開始说起---中介者模式。

顾名思义,中介的意思就是指在不同事物或同一事物内部对立两极之间起居间联系作用的环节。官方定义。用一个中介对象来封装一系列的对象交互,中介者使各对象不须要显式地相互作用。从而使其耦合松散,并且能够独立地改变她们之间的交互,来看一下中介者模式的结构图:

         

       依旧以我们上述的婚庆公司为例,来探究一下中介者模式是怎样应用的。试想一下,在没有婚庆公司之前,大家之间的交流是这个样子的:

         

        大家看着是不是有种凌乱的感觉,假设人的数目多起来就会变成网状的结构啦。

在我们的软件世界中。原本把一个系统切割成一些对象是能够增强复用性的,可是如今的情况是,这些兑现之间存在着大量的联系,耦合性极高。

这是非常不利于复用的,同一时候这样的情况使得系统的灵活性大大的减少。使得对系统的扩展非常难。假设如今能够借助婚庆公司。那么能够採用还有一种方式设计上述的案例。例如以下:

          

        看看“网状结构”和“星形结构”的差别,显然採用星形结构就能够避免上面的网状结构存在的问题了,实际上这里的婚庆公司就是指的中介。大家能够通过婚庆公司来进行交流。

看一下这个样例的代码结构图:

           

          接着来看一下。我们的代码实现:

           

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Baihe Bh = new Baihe();
            Boy c1 = new Boy(Bh);
            Girl c2=new Girl (Bh );

            Bh.Colleague1 = c1;
            Bh.Colleague2 = c2;

            c1.Declare("我想找一个女朋友,给她世上最好的温和!");
            c2.Declare("假设明天的路,你不知道该往哪儿走,就留在我身边好不好!");

            Console.Read();
        }
    }
    //婚庆公司类,相当于Mediator类
    //婚庆公司
    abstract class WeddingCompany
    {
        //声明
        public abstract void Declare(string message, People colleague);
    }

    //人类 相当于Colleague类
    abstract class People
    {
        protected WeddingCompany mediator;

        public People (WeddingCompany mediator)
        {
            this.mediator = mediator;
        }
    }

     //男孩类 相当于ConcreteColleague1类
    //男孩
    class Boy :People
    {
        public Boy(WeddingCompany mediator):base( mediator )
        { }
        //声明
        public void Declare (string message)
        {
            mediator.Declare(message, this);
        }

        //获得信息
        public void GetMessage(string message)
        {
            Console.WriteLine("我想找一个女朋友,给她世上最好的温和");
        }
    }

    //女孩类 相当于ConcreteColleague2类
    //女孩
    class Girl:People
    {
       public Girl (WeddingCompany mediator):base(mediator )
        { }
        //声明
        public void Declare(string message)
       {
           mediator.Declare(message, this);
       }
        //获得消息
        public void GetMessage(string message)
        {
            Console.WriteLine("假设明天的路,你不知道往哪儿走,就留在我身边好不好");
        }
    }

    //详细的婚庆公司,百合网这里相当于ConcreteMediator类
    //百合网
    class Baihe:WeddingCompany
    {
        private Boy colleague1;
        private Girl colleague2;

        //男孩
        private Boy Colleague1
        { set { colleague1 = value; } }
        //女孩
        private Girl Colleague2
        { set { colleague2 = value; } }

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

    }
}
</span></span></span>
        或许有一天,他真的会出如今我面前,那个在阳光底下微笑的少年,或许有一天,我们会一起去看北极光,我会和他一起仰望星空。谈论当初冰心对铁凝说的话。我不知道直到多久以后的某一天,他真的会出现。但能够确定的是。编程就是生活。

原文地址:https://www.cnblogs.com/wgwyanfs/p/7213922.html