• 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);
                }
            }
        }
    }
  • 相关阅读:
    Cross-Site Scripting XSS 跨站攻击全攻略 分类: 系统架构 2015-07-08 12:25 21人阅读 评论(2) 收藏
    WAS集群:记一次Node Agent不活动问题解决过程
    Oracle RAC集群资料收集
    Linux使用 tar命令-g参数进行增量+差异备份、还原文件
    WAS7.0安装补丁升级程序无法替换文件 java/docs/autorun.inf解决办法
    Java程序员面试失败的5大原因
    Lemon OA第4篇:常用功能
    Lemon OA第3篇:核心功能
    Lemon OA第2篇:功能解析方法
    Activiti5小试牛刀demo流程
  • 原文地址:https://www.cnblogs.com/May-day/p/9018684.html
Copyright © 2020-2023  润新知