中介者模式(Mediator) 使用一个中介对象来封装一系列对象的交互行为,中介者模式可使各个对象之间不需要显示的引用,降低耦合度,并且可以独立改变之间的交互.
各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用中介者模式,可以使各个对象间的耦合松散,只需关心和中介者的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可扩展性.
public class Consumer
{
public void Consume(string source)
{
}
} // class Consumer
public class Provider
{
private Mediator m_Mediator;
public string Message { get; private set; }
public Provider(Mediator mediator)
{
m_Mediator = mediator;
}
public void Provide()
{
if (m_Mediator != null)
{
m_Mediator.Process();
}
}
} // class Provider
public class Mediator
{
private Provider m_Provider;
private Consumer m_Consumer;
public Mediator(Provider provider, Consumer consumer)
{
m_Provider = provider;
m_Consumer = consumer;
}
public void Process()
{
m_Consumer.Consume(m_Provider.Message);
}
} // class Mediator
可以看到,生产者对中介者加以引用,目的是通知中介者自己执行的操作.这种结构的一个缺陷是生产者与中介者的引用过于紧密,即生产者必须依赖于具有同一个父类的中介者(可以定义一个中介接口处理更为复杂的业务),显然不够灵活.在.NET应用中,考虑可以采用委托来去掉生产者对中介者的依赖,而效果完全相同.
.NET中的人机界面无论是Win Form还是Web Form,均采用中介者实现界面中的元素相互关联.窗体本身就是中介者,窗体中的元素就是生产者.界面中的元素知道窗体的存在,当发生变化时采用事件机制调用窗体中相应的方法,由窗体操作相关的其它对象.