中介者模式(调停者模式)
对于对象之间存在复杂交互关系的系统,中介者模式提供了一种简化复杂交互的解决方案,将原本对象之间的两两交互转化为每个对象与中介者之间的交互。(比方:类似于QQ群作用,而不是一个一个发给用户),中介者模式将系统的网状结构变成以中介者为中心的星形结构。
中介者模式:定义一个对象来封装一系列对象的交互,中介者模式使各对象之间不需要显式地相互引用,从而使其耦合松散,而且让你可以独立地改变它们之间的交互。
中介者模式有4种角色:
1.Mediator(抽象中介者):它定义一个接口,该接口用于与各个同事对象之间进行通信。
2.ConcreteMediator(具体中介者):抽象中介者的子类,通过协调各个同事对象来实现协作行为维持了对各个同事对象的引用。
3.Colleague(抽象同事类):定义各个同事类公有的方法,并声明了一些抽象方法供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用与中介者通信。
4.ConcreteColleague(具体同事类):抽象同事类的子类,实现声明的抽象方法。
抽象中介者类:
using System.Collection.Generic;
abstract class Mediator
{
protected List<Colleague> colleagues = new List<Colleague>();//用于存储同事对象
//注册方法,用于增加同事对象
public void Register(Colleague colleague)
{
colleagues.Add(colleague);
}
//声明抽象的业务方法
public abstract void Operation();
}
具体中介类:
class ConcreteMediator:Mediator
{
//实现业务方法,封装同事之间的调用
public override void Operation()
{
...
((Colleague)(colleagues[0])).Method();//通过中介者调用同事类的方法
...
}
}
抽象同事类:
abstract class Colleague
{
protected Mediator mediator; //维持一个抽象中介者的引用
public Colleague(Mediator meidator)
{
this.mediator = meidator;
}
public abstract void Method1(); //声明自身方法,处理自己的行为
//定义依赖方法,与中介者进行通信
public void Method2()
{
mediator.Operation();
}
}
具体同事类:
class ConcreteColleague : Colleague
{
public ConcreteColleague(Mediator mediator):base(mediator)
{}
public override void Method1()
{
...
}
}