6

我有一个带有很多控件的 GUI 应用程序。它们中的大部分都有事件,并且控件在逻辑上连接到每个那里。例如,我有 5 个组合框。如果我在cb1cb3中选择某些内容,则cb2必须更改其可用值的列表。如果我在cb2ch4中选择某些东西,它们cb5必须加载其可用值列表。我在网上找到的所有文章都说我应该使用中介模式在这种情况下。但在所有这些文章中,调解员 - 就​​像一个上帝类,它了解所有控制的一切,并决定在发生某些事件时应该做什么。如果我有 5-6 个控制器 - 一切都很好。但是如果我有 20 或 40 个控件呢?我猜在这种情况下,中介类会变成怪物。很难用它做点什么(修改或添加新功能)。

是否有任何其他模式或中介路径的好例子,这将有助于解决这种情况?

PS:对不起,如果这个主题已经存在问题 - 有太多同名的问题,从所有这些主题中找到我真正需要的东西并不容易。

4

5 回答 5

3

调解器确实是这里的正确选择,但是还有使用 OBSERVER 模式的替代选项,它允许您保持逻辑分离。(cb2 观察 cb1 并做出适当反应,cb3->cb2 等)。

使用 OBSERVER 模式,您一次只能链接 2 个控件,这就像链。

于 2012-04-16T18:34:15.780 回答
1

尝试将属于自定义组件(扩展 JComponent 或 JPanel)的组件组合在一起。这些自定义组件侦听其子级的事件并在必要时更新其他子级(-> 它们成为调解器)。自定义组件也可以触发它们自己的自定义事件,从而通知它们的父 Mediator。

于 2012-04-16T16:31:39.447 回答
0

使用不同的动作作为策略Strategy Pattern并从Mediator调用特定的策略,这样如果你明天需要添加更多的控制器,你只需要更改几行代码。

于 2012-04-16T16:13:47.310 回答
0

中介者模式 - Wiki

如果来自维基百科,但它很简单并且易于理解。

当我过去研究模式时,这个代码是最好的。简单而高效...是的,对于您所描述的,我会使用调解器模式

于 2012-04-16T16:07:17.737 回答
0

gof 书 说:

" ... 相关模式

Facade (185) 与 Mediator 的不同之处在于它抽象了对象子系统以提供更方便的接口。它的协议是单向的;也就是说,Facade 对象向子系统类发出请求,反之则不然。相比之下,Mediator 实现了同事对象不提供或不能提供的协作行为,并且协议是多向的。

同事可以使用 Observer (293) 模式与调解员进行通信。……”。

我怀疑观察者和调解者或门面的组合会很好地工作。

请记住,设计模式的品质之一是每次您实现一种模式时,它们都是不同的。

于 2012-04-16T18:50:05.300 回答