C# 设计模式———中介模式

中介模式简介

用一个中介对象封装一系列的对象交互,中介使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
在这里插入图片描述
在这里插入图片描述

使用场景:类与类之间的通信,如何减少耦合;

C# 中介模式Demo

在这里插入图片描述

using System.Collections.Generic;
using System;
using System.Linq;

namespace MediatorPattern
{
    /// <summary>
    /// 测试  MediatorPattern
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            AbstractMediator mediator = new ConcreteMediator();

            AbstractColleague colleague1 = new Colleague("bob", mediator);
            AbstractColleague colleague2 = new Colleague("linlin", mediator);

            mediator.Add(colleague1);
            mediator.Add(colleague2);

            colleague1.Send("linlin", "在吗?");
            colleague2.Send("bob", "在的,怎么啦");
        }
    }

    /// <summary>
    /// AbstractColleague抽象类
    /// </summary>
    public abstract class AbstractColleague
    {
        public string UserName { get; set; }
        public abstract void Send(string name, string msg);
        public abstract void Receive(string msg);
    }

    /// <summary>
    /// AbstractMediator抽象类 中介媒介;
    /// </summary>
    public abstract class AbstractMediator
    {
        public abstract void Add(AbstractColleague colleague);
        public abstract void Send(string name, string msg);
    }

    /// <summary>
    /// 具体实现 AbstractColleague类, 引用 AbstractMediator
    /// </summary>
    public class Colleague : AbstractColleague
    {
        AbstractMediator mediator = null;

        public Colleague( string name, AbstractMediator mediator)
        {
            this.UserName = name;
            this.mediator = mediator;
        }

        public override void Receive(string msg)
        {
            Console.WriteLine(msg);
        }

        public override void Send(string name, string msg)
        {
            Console.WriteLine(UserName + "发件");
            this.mediator.Send(name, msg);
        }
    }

    /// <summary>
    /// 具体实现 AbstractMediator,引用 AbstractColleague
    /// </summary>
    public class ConcreteMediator : AbstractMediator
    {
        private List<AbstractColleague> colleagues = new List<AbstractColleague>();
        public override void Add(AbstractColleague colleague)
        {
            colleagues.Add(colleague);
        }

        public override void Send(string name, string msg)
        {
            var single = colleagues.FirstOrDefault(i => i.UserName == name);
            if( single != null)
            {
                single.Receive(string.Format("{0}收到——{1}", name, msg));
            }
        }
    }
}

测试结果:
在这里插入图片描述

参考资料

https://www.runoob.com/design-pattern/mediator-pattern.html
https://www.bilibili.com/video/av78515440?p=12

发布了18 篇原创文章 · 获赞 17 · 访问量 2694

猜你喜欢

转载自blog.csdn.net/chasinghope/article/details/104212962