中介者模式(Mediator)
1、背景
类与类之间会产生直接的交互,这在实际的编码中是常见的,例如,A类调用B类的方法。我们常说的“对扩展开放,对修改关闭”原则就是要防止某处修改导致处处修改的情景,因为这样极不利于后期维护。当A类直接调用B类的方法时,A类对B类产生了直接的依赖关系:A类直接依赖B类的方法。当B类的方法发生修改时(例如B类方法的方法名发生改变,B的类名发生改变),A类中的调用B类的方法的代码就极有可能报错,即需要修改。当然,这只是A类依赖B类的方法,若有更多的C、D、E、F依赖B的方法呢?确切地,C、D、E、F也有可能要修改对应的代码,这样就违背了“开闭原则”。一个类修改,其他类可能全部都需要修改,为了解决这个问题:中介者设计模式诞生了。
2、概述
①定义
中介者模式将各个类笼络在一个中介类的内部,由中介类负责为各个类建立相关的逻辑关系,实现相关的方法功能,防止各个类直接发生依赖。各个类只与中介类发生直接依赖。
附图:使用中介者模式之前
附图:使用中介者模式之后
②优势
- 有效降低类与类之间的耦合度
- 通过中介类将各个类聚集在一起,间接实现逻辑,体现了高内聚的特点
- 后期代码维护性强,健壮性强
③劣势
- 随着中介类管理的类愈多,内部类与类之间的逻辑愈复杂,后期中介类代码臃肿,不利于维护。
- 对于耦合度不高的类来说是多此一举
3、实例分析
下面为大家介绍一系列有关中介者模式的代码。
①不使用中介者模式
逻辑:A、B类为分为一类,H类分为一类。A、B类直接依赖H类的show方法。
逻辑:当H类的方法名发生变化时(如图,由show变为了show_),A、B类中都相继报错,需要修改对应的方法名。
②使用了中介者模式
逻辑:Mediator为中介类,中介类注入H类,并在中介类中定义meaditorShow方法,方法中添加H类的show方法。这样,Mediator对H类建立了直接依赖。A、B类中注入Mediator类,并在showH方法中添加Mediator的mediatorShow方法,至此,A、B与Mediator类建立了直接依赖,与H类只是建立了间接依赖。当H类中方法show名称发生改变时,报错的位置只是存在于Mediator类,而不需要修改A、B类了。