C#设计模式:中介者模式(Mediator Pattern)

一,什么是中介者模式(Mediator Pattern)?

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。比如:如果我们实现两个人的交互,难道我们要定义两个对象如ChineseA,ChineseB和ChineseC,然后他们都一起说话聊天,我们要他们之间的交互改成他们和中介的交互实现聊天。在这里我们需要用到中介者设计模式,将交互的由将交互的形式有对象-对象转变为,对象-中介-对象的形式

二,如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _17.中介者模式
{
    //中介者模式适合用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构。这有利于把蜘蛛网状结构梳理为星型结构,
    //使原本复杂混乱的关系变得清晰简单
    //用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
    //比如:如果我们实现两个人的交互,难道我们要定义两个对象如ChineseA,ChineseB和ChineseC,然后他们都一起说话聊天,
    //我们要他们之间的交互改成他们和中介的交互实现聊天。在这里我们需要用到中介者设计模式,将交互的将交互的形式有对象-对象转变为,对象-中介-对象的形式
    class Program
    {
        static void Main(string[] args)
        {
            People chinese1 = new Chinese()
            {
                Name = "中国人1"
            };

            People chinese2 = new Chinese()
            {
                Name = "中国人2"
            };

            People usa = new Usa()
            {
                Name = "美国人"
            };

            ////初始化要传递给谁的数据
            Mediator mediator = new Mediator();
            mediator.Addpeople(chinese1);
            mediator.Addpeople(usa);

            ////中国人发送消息
            mediator.SendMessage("聚餐啦啦啦啦!!", chinese2);
        }
    }
    /// <summary>
    /// 抽象类
    /// </summary>
    public abstract class People
    {
        public string Name { get; set; }
        public abstract void SendMessage(string message, People peopleTo);
        public abstract void GetMessage(string message, People peopleFrom);
    }
    /// <summary>
    /// 中国人,具体实现类
    /// </summary>
    public class Chinese : People
    {
        public override void SendMessage(string message, People peopleTo)
        {
            Console.WriteLine("{0}说 {1}:{2}", base.Name, peopleTo.Name, message);
            peopleTo.GetMessage(message, this);
        }

        public override void GetMessage(string message, People peopleFrom)
        {
            Console.WriteLine("{0}get{1}:{2}", base.Name, peopleFrom.Name, message);
        }
    }
    /// <summary>
    /// 美国人,具体实现类
    /// </summary>
    public class Usa : People
    {
        public override void SendMessage(string message, People peopleTo)
        {
            Console.WriteLine("{0}说 {1}:{2}", base.Name, peopleTo.Name, message);

            peopleTo.GetMessage(message, this);

        }

        public override void GetMessage(string message, People peopleFrom)
        {
            Console.WriteLine("{0}get{1}:{2}", base.Name, peopleFrom.Name, message);
        }
    }
    /// <summary>
    /// 中介类
    /// 比如一个通信平台,本来是中国人通知美国人的,现在是一个中介者通知所有人,解耦合
    /// </summary>
    public class Mediator
    {
        public string Name { get; set; }
        private List<People> _peopleList = new List<People>();

        public void Addpeople(People basepeople)
        {
            this._peopleList.Add(basepeople);
        }

        /// <summary>
        /// 群里面发消息的功能
        /// </summary>
        /// <param name="message"></param>
        /// <param name="peopleFrom"></param>
        public void SendMessage(string message, People peopleFrom)
        {
            Console.WriteLine("{0}Send:{1}", peopleFrom.Name, message);
            foreach (var item in this._peopleList)
            {
                item.GetMessage(message, peopleFrom);
            }
        }
    }
}

 

posted @ 2018-05-10 11:23  叶丶梓轩  阅读(289)  评论(0编辑  收藏  举报