【问题标题】:Mediator Pattern - Question about Colleague中介者模式 - 关于同事的问题
【发布时间】:2021-10-05 03:33:25
【问题描述】:

这是我的第一篇文章,描述这个问题对我来说很难。

我相信我完全理解中介者模式。我的问题更多是关于技术性的。

我有一名调解员和 3 名同事 (C1-3)。

Mediator 向/从 C1 发送和取回消息。它也向/从 C2 发送和取回消息。但是对于 C3,它只发送一条消息,并且不接收任何消息。

C1 和 C2 显然是同事。 但从 [Java] 编码的角度来看,C3 不必是同事。它从不回调中介,因此它从不使用中介字段。这是继承所能给予的唯一东西,所以给予它是毫无意义的。

但另一方面,Mediator 确实使用 C3,所以我们是否要让同事明确这一点?

我想知道这个问题是否有技术答案,或者这只是一个意见问题。

【问题讨论】:

    标签: design-patterns mediator


    【解决方案1】:

    GoF 书说,(第 277 页)

    每个同事类都知道它的 Mediator 对象。

    这种关系在几张图中清楚地显示出来。

    现在让 Mediator 单向调用另一个对象肯定没有问题。这可能是同事发起的呼叫的一种副作用。但接收该副作用调用的对象本身不会被视为同事。它只是您应用程序中的另一个对象,而不是 Mediator 设计模式的一部分。

    请考虑,除非您的应用程序中的每个对象都是同事,否则信息必须通过某种方式传入和传出模式,因此在某些时候将消息发送给非同事是有意义的。

    【讨论】:

      【解决方案2】:

      我猜你指的是中介者示例from Wikipedia,它使用同事类和子类进行演示。

      实际上,我认为这个例子很混乱,因为它被过度设计了。中介者模式实际上与继承无关。中介者的要点是有一些对象需要相互通信,但只能通过中介者对象间接地进行通信。如果在您的情况下,与 C3 的所需通信只是单向的,那很好,如果不需要,则无需保留对中介对象的引用。

      另请注意,软件设计中没有“规则”或“法律”说您需要完全按照 GoF 书中介绍的方式实现设计模式 - 如果更简单或部分解决方案就足够了,请继续 - GoF 设计模式是建议如何实现事物,不多也不少。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-26
        • 1970-01-01
        • 2014-10-14
        • 2011-06-04
        • 1970-01-01
        相关资源
        最近更新 更多