中介者模式是一种行为型设计模式,它用于减少对象之间的直接耦合,从而更好地维护代码的可扩展性和可维护性。
在中介者模式中,一个中介者对象封装了一组对象之间的交互逻辑,这些对象通常都有相互关联,但是彼此之间并不直接交互。中介者对象负责协调对象之间的通信,将对象之间的通信逻辑封装在中介者对象中,从而避免对象之间的直接耦合。
中介者模式中有以下几个主要角色:
下面使用C#实现简答中介者模式:
创建抽象中介者接口Mediator,该接口声明了一个方法Send用于发送消息:
public interface Mediator
{
void Send(string message, Colleague colleague);
}
创建抽象同事类Colleague,该类声明了一个中介者对象,用于与其他同事类交互:
public abstract class Colleague
{
protected Mediator mediator;
public Colleague(Mediator mediator)
{
this.mediator = mediator;
}
public abstract void Send(string message);
public abstract void Notify(string message);
}
创建具体同事类ConcreteColleagueA和ConcreteColleagueB,它们实现了抽象同事类Colleague,并实现了发送消息和接收消息的方法:
public class ConcreteColleagueA : Colleague
{
public ConcreteColleagueA(Mediator mediator) : base(mediator)
{
}
public override void Send(string message)
{
mediator.Send(message, this);
}
public override void Notify(string message)
{
Console.WriteLine("ColleagueA received message: " + message);
}
}
public class ConcreteColleagueB : Colleague
{
public ConcreteColleagueB(Mediator mediator) : base(mediator)
{
}
public override void Send(string message)
{
mediator.Send(message, this);
}
public override void Notify(string message)
{
Console.WriteLine("ColleagueB received message: " + message);
}
}
创建具体中介者类ConcreteMediator,该类实现了抽象中介者接口Mediator,并维护了一组同事类对象:
public class ConcreteMediator : Mediator
{
private ConcreteColleagueA colleagueA;
private ConcreteColleagueB colleagueB;
public ConcreteColleagueA ColleagueA
{
set { colleagueA = value; }
}
public ConcreteColleagueB ColleagueB
{
set { colleagueB = value; }
}
public void Send(string message, Colleague colleague)
{
if (colleague == colleagueA)
{
colleagueB.Notify(message);
}
else
{
colleagueA.Notify(message);
}
}
}
可以这样调用:
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);
ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);
mediator.ColleagueA = colleagueA;
mediator.ColleagueB = colleagueB;
colleagueA.Send("Hello, ColleagueB.");
colleagueB.Send("Hello, ColleagueA.");
输出:
ColleagueB received message: Hello, ColleagueB.
ColleagueA received message: Hello, ColleagueA.
在这个例子中,ConcreteMediator
充当了中介者的角色,ConcreteColleagueA
和ConcreteColleagueB
充当了同事类的角色。当ConcreteColleagueA
发送消息时,ConcreteMediator
将消息转发给ConcreteColleagueB
,ConcreteColleagueB
将接收到消息并打印在控制台上。当ConcreteColleagueB
发送消息时,ConcreteMediator
将消息转发给ConcreteColleagueA
,ConcreteColleagueA
将接收到消息并打印在控制台上。这样,ConcreteColleagueA
和ConcreteColleagueB
就不需要直接交互,而是通过ConcreteMediator
来协调它们之间的通信。
在中介者模式中,抽象中介者和抽象同事类是抽象层,而具体中介者和具体同事类是实现层。中介者模式通过将对象之间的通信交给中介者来实现松耦合,从而提高系统的可维护性和可扩展性。
本文分享自 Niuery Diary 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!