什么时候使用中介者设计模式?

17

正如标题所述,您何时建议使用中介者设计模式,并且您认为它被错误使用的情况有哪些?

3个回答

25

在对象通信的复杂性开始妨碍对象可重用性时,使用中介者。这种复杂性通常出现在视图实例中,但它可能真的存在于任何地方。

错误使用中介者可能导致瘫痪中介者同事类的接口。

谈论误用模式似乎有点滑稽。如果你的实现遵循了该模式,那么你已经使用了该模式。否则,你就没有使用。换句话说,如果你的中介者正在做其他事情,那么它可能不是一个中介者。模式由它们所做的和实际上是什么来定义。事物的名称只是标签。

真正需要问自己的问题是,你对模式的实现是否符合你的设计的承诺。当复杂的对象通信变得难以管理时,中介者模式旨在封装它。如果没有完成这个目标,或者做得不好,你可以说中介者被误用了。在某些时候,这成为一个价值判断。


我遇到的一种误用是创建一个巨大的中介者类,并在其中添加大量逻辑。 - Stefan Iancu

3

我已经使用它来处理swing应用程序。

当我构建GUI时,我不喜欢每个控件都知道彼此,因为那需要子类化。

相反,我有一个主对象,它包含监听器和小部件,并让它在不同的控件、按钮、文本字段等之间进行调解。


我相信你在这里使用“包含”一词的事实表明这实际上不是中介者模式。听起来更像是外观模式(或我所谓的管理器类)。中介者似乎更多地涉及两个类之间共享一个类,也许你从一个类传递到另一个类,或者你给两个类一个引用,然后它们之间就会形成一种间接连接。 - Andrew
实际上,你从一个类传递到另一个类的共享类听起来更像是享元模式哈哈。我不知道,也许这些定义对特定语言来说过于模糊和/或过于紧密耦合了。 - Andrew

2

中介者基本上就是事件泵。这是GUI和游戏中非常常见的模式。

我之前也使用过中介者在非常不同的系统和旧框架之间进行通信。


事件泵 == 事件中心,对吗?基本上只是一个总线系统?还是更像事件驱动的中介(路由请求)? - Cody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接