中介模式简介
用一个中介对象封装一系列的对象交互,中介使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
使用场景:类与类之间的通信,如何减少耦合; | |
---|---|
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