一、中介者模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
二、示例
智能家居项目:现在要设计一套智能家居系统,家里有闹钟、咖啡机、窗帘、电视。当早晨闹钟响起之后要控制咖啡机自动煮咖啡,咖啡煮好之后窗帘要自动打开,电视机也打开开始播放新闻
用传统模式规划此项目的话是通过对象之间的彼此控制,用闹钟控制咖啡机,用咖啡机控制窗帘和电视。虽然传统模式也可以实现功能,但是各组件之间相互依赖性较高,且不利于新电器的增加,网状结构较复杂
引入中介者模式,定义一个中介者,连接各个组件,各组件的功能全部通过中介者控制,则每个组件只需与中介者通信即可,且利于组件的增加和减少
1.定义中介者的接口
1 |
|
2.定义各组件实现的抽象类
1 | /** |
3.各组件实现抽象类的抽象方法和自己实现的功能方法
1 | /** |
1 |
|
1 |
|
1 |
|
4.定义中介者,用于集中管控所有组件之间的功能
1 |
|
5.组件调用
1 |
|
根据以上中介者模式的设计方式可以实现各组件只需发送修改自己的状态即可,剩下的控制全由中介者负责,降低各组件之间的耦合度,利于拓展。
三、总结
优点:
- 通过将对象彼此解耦,可以增加对象的复用性
- 通过将控制逻辑集中,可以简化系统维护
- 可以让对象之间所传递的消息变得简单而且大幅减少
- 提高系统的灵活性,使得系统易于扩展和维护
缺点:
- 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响
- 如果设计不当,中介者对象本身变得过于复杂
适用场合:
- 一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱
- 一个对象引用很多其他对象并直接与这些对象通信,导致难以复用该对象
Java设计模式所有示例代码,持续更新中