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
更多:

23種設計模式C#

發佈了27 篇原創文章 · 獲贊 25 · 訪問量 3292
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章