Java设计模式之行为型模式(中介者模式)

来源:互联网 发布:安卓7.0 java模拟器 编辑:程序博客网 时间:2024/06/07 16:26

中介者模式(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类了。

0 0