21 Mediator中介者模式(行为型)
21 Mediator(行为型)
-
- 中介者/调停者对象封装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。)
- 动机:
- 面向对象设计鼓励在对象之间分布行为。这种分布可以产生对象结构,对象之间有许多连接;在最坏的情况下,每个对象最终都知道彼此。
- 什么时候用:
- 一组对象以定义良好但复杂的方式通信。由此产生的相互依赖关系是非结构化的,难以理解。
- 重用一个对象是困难的,因为它涉及并与许多其他对象通信。
- 分布在多个类之间的行为应该是可自定义的,而不需要很多子类化。
- 结构:
-
- 参与者:
- 中介:定义用于与同事对象通信的接口。
- 具体的中介者:通过协调同事对象来实现协作行为。了解并维护其同事。
- Colleague classes:
- 每个同事类都知道它的中介对象。
- 每一个同事与它的调解人沟通时,它将会与另一个同事沟通。(
colleague间的通信一定要通过mediator)
-
- 协作:
- Colleagues send and receive requests from a Mediator object.
- 中介通过在适当的同事之间路由请求来实现协作行为。
- 好处:
- 解耦
- 简化对象协议
- 对象之间的合作抽象出来
- 集中控制
- 中介模式以交互的复杂性换成了中介者的复杂性。
- 由于中介封装了协议,因此它可能比任何单个同事都要复杂。这可以使中介本身一个庞然大物(巨无霸),很难维护。
- 协作:
-
- 缺点:
- 所有复杂性在中介者中
- 避免误用中介者
- 中介模式适用于避免混乱和丑陋的系统。
- 中介模式不应该应用于一个混乱和丑陋的系统。
- 缺点:
-
- 原则:最小知识原则