目录

大话设计模式25:中介者模式

大话设计模式:25.中介者模式

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互

TL;DR:通过让中间对象包含所有其他对象的方式,将交互的工作,集中到中介上来,从而减少对象直接的直接交互

中介者模式结构图

1.优缺点

  1. 优点

    1. 减少了各 Colleague 之间的耦合,使得可以独立地改变和复用各个 Colleague 和 Mediator
    2. 由于把对象如何协作进行抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,是站在更宏观的角度去看待系统
  2. 缺点

    1. 由于 ConcreteMediator 控制了集中化,交互的复杂性变为了中介者的复杂性,使得中介者会变得比任何一个 ConcreteColleague 都复杂

2.实现细节

  1. Colleague 类:抽象同事类,包含一个中介者对象
  2. Mediator 类:抽象中介者类,定义一个抽象的发送消息方法,输入参数包含接受消息的同事对象和需要发送的消息
  3. ConcreteColleague 类:具体同事类,只知道自己的行为,而不了解其他同事类的情况
  4. ConcreteMediator 类:具体中介者类,实现接口,它需要知道(包含)所有具体同事类,并从具体同事类接收消息,向具体同事对象发出命令

3.使用场景

  1. 一组对象以定义良好但复杂的方式进行通信的场合
  2. 想定制一个分布在多个类中的行为,但又不想生成太多子类的场合
  3. 如果不存在拓展情况,Mediator 可以和 ConcreteMediator 合二为一