中介模式簡介
用一箇中介對象封裝一系列的對象交互,中介使各對象不需要顯示地相互作用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。
使用場景:類與類之間的通信,如何減少耦合; | |
---|---|
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
更多: