什么是中介者模式

中介者模式是一种行为设计模式,让程序组件通过特殊的中介者对象进行间接沟通, 达到减少组件之间依赖关系的目的。

中介者能使得程序更易于修改和扩展, 而且能更方便地对独立的组件进行复用, 因为它们不再依赖于很多其他的类。

2 例子

假如有房东,中介,房客三种角色,房东有房子可以出租就通知中介,中介把这条信息通知给所有房客,房客看到信息后进行处理,同理,房客有求助需求,也把求助信息通知给中介,中介把这条信息通知给房东,房东看到信息后进行处理。

3 实现

首先, 声明中介者接口并描述中介者和各种组件之间所需的交流接口。

public interface IMediator { void Notify(object sender, string ev); }

然后,实现具体中介者类。

class ConcreteMediator : IMediator { private readonly LandlordComponent landlordComponent; private readonly TenantComponent tenantComponent; public ConcreteMediator(LandlordComponent landlordComponent, TenantComponent tenantComponent) { this.landlordComponent = landlordComponent; this.landlordComponent.SetMediator(this); this.tenantComponent = tenantComponent; this.tenantComponent.SetMediator(this); } public void Notify(object sender, string ev) { if (ev == "求租") { Console.WriteLine("中介收到求租信息后通知房东。"); landlordComponent.DoB(); } if (ev == "出租") { Console.WriteLine("中介收到出租信息后通知房客。"); tenantComponent.DoD(); } } }

接着,组件基础类会使用中介者接口与中介者进行交互。

class BaseComponent { protected IMediator mediator; public void SetMediator(IMediator mediator) { this.mediator = mediator; } }

接着,具体组件房东,房客类,房东不与房客进行交流,只向中介者发送通知。

// 4. 具体组件房东 class LandlordComponent : BaseComponent { public void DoA() { Console.WriteLine("房东有房子空出来了,向中介发送出租信息。"); this.mediator.Notify(this, "出租"); } public void DoB() { Console.WriteLine("房东收到求租信息,进行相应的处理。"); } } // 具体组件房客 class TenantComponent : BaseComponent { public void DoC() { Console.WriteLine("房客没有房子住了,向中介发送求租信息。"); this.mediator.Notify(this, "求租"); } public void DoD() { Console.WriteLine("房客收到出租信息,进行相应的处理。"); } }

最后,创建客户端类。

// 客户端代码 class Program { static void Main(string[] args) { LandlordComponent landlordComponent = new LandlordComponent(); TenantComponent tenantComponent = new TenantComponent(); new ConcreteMediator(landlordComponent, tenantComponent); landlordComponent.DoA(); Console.WriteLine(); tenantComponent.DoC(); Console.ReadKey(); } }

让我们来看看输出结果:

房东有房子空出来了,向中介发送出租信息。 中介收到出租信息后通知房客。 房客收到出租信息,进行相应的处理。 房客没有房子住了,向中介发送求租信息。 中介收到求租信息后通知房东。 房东收到求租信息,进行相应的处理。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywsxf.html