一、概念
- 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
二、场景
- 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
- 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
三、实现
- 条件
- C#
- 场景
- 以乘客打车下订单为例,司机接收订单后,需要告知其他抢单的司机为场景实现中介者设计模式。
- 代码实现
- 新建A司机类,类名:ADriver
using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { public class ADriver : AbstractCompany, IDriver { public void Receive() { Console.WriteLine("ADriver:接收到信息"); } public void Send() { dCompany.Sender(); } } }
- 新建B司机类,类名:BDriver
using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { public class BDriver : AbstractCompany, IDriver { public void Receive() { Console.WriteLine("BDriver:接收到消息"); } public void Send() { dCompany.Sender(); } } }
- 新家司机接口类,类名:IDriver
using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { public interface IDriver { void Send(); void Receive(); } }
- 新建公司抽象类,类名:AbstractCompany
using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { public abstract class AbstractCompany { public DDCompany dCompany { get; set; } } }
- 新建公司实现类,类名:
using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { public class DDCompany { private List<IDriver> list = new List<IDriver>(); public void Add(IDriver driver) { list.Add(driver); } public void Sender() { list.ForEach(d => { d.Receive(); }); } } }
- 入口函数类,类名:
using System; namespace MediatorPattern { internal class Program { static void Main(string[] args) { ADriver aDriver = new ADriver(); BDriver bDriver = new BDriver(); DDCompany dDCompany = new DDCompany(); dDCompany.Add(bDriver); aDriver.dCompany = dDCompany; aDriver.Send(); } } }
- 新建A司机类,类名:ADriver
四、优缺点
- 优点
- 降低了类的复杂度,将一对多转化成了一对一。
- 各个类之间的解耦。
- 符合迪米特原则。
- 缺点
- 中介者会庞大,变得复杂难以维护。