这是我的第一篇文章,描述这个问题对我来说很困难。
我相信我完全理解Mediator模式。我的问题更多的是关于技术上的。
我有一个中介人和3个同事(C1-3)。
中介器将消息发送到C1或从中获取消息。它也可以向C2发送消息,也可以从well服务器接收消息。但使用C3时,它只发送一条消息,并且不接收任何消息。
C1和C2显然是同事。但是从Java编码的角度来看,C3不一定是同事。它从不回调中介器,因此它从不使用mediator字段。这是继承能给它的唯一东西,所以从某种意义上说,提供它是没有意义的。
但是另一方面,中介者确实使用了C3,那么我们需要让它成为一个同事来说明这一点吗?
我想知道这个问题是否有技术上的答案,或者这只是一个意见问题。
发布于 2021-10-06 14:45:44
GoF的书上说,(第277页)
每个同事类都知道它的中介器对象。
这种关系在几个图中清楚地显示出来。

现在,让Mediator对另一个对象进行单向调用肯定是没有问题的。这可能是对同事发起的电话的一种副作用。但是,接收到该副作用调用的对象本身不会被视为同事。它只是应用程序中的另一个对象,而不是Mediator设计模式的一部分。
请考虑,除非应用程序中的每个对象都是同事,否则必须有某种方式让信息进出模式,因此在某个时刻将消息发送给非同事是有意义的。
发布于 2021-10-05 15:26:06
我猜您指的是中介器示例from Wikipedia,它使用同事类和子类进行演示。
实际上,我认为这个例子相当混乱,因为它是过度设计的。中介器模式实际上与继承没有任何关系( nothing )。中介器的要点是,有一些对象需要相互通信,但只能通过中介器对象间接通信。如果在您的示例中,所需的与C3的通信只是单向的,那也没问题,如果不需要,则不需要保留对中介对象的引用。
还请注意,软件设计中没有“规则”或“法则”要求您需要完全按照GoF书中介绍的方式实现设计模式-如果更简单或部分解决方案足够,请继续- GoF设计模式是如何实现的建议,不多也不少。
https://stackoverflow.com/questions/69444619
复制相似问题