使用哪种设计模式(我需要类似中介模式的东西)?

时间:2012-04-16 16:05:27

标签: java design-patterns architecture

我有一个带有很多控件的GUI应用程序。他们中的大多数都有事件和控制在逻辑上连接到那里。 例如,我有5个组合框。 如果我选择 cb1 cb3 中的内容,则 cb2 必须更改其可用值列表。 如果我选择 cb2 ch4 中的内容,则 cb5 必须加载其可用值列表。 我在网上找到的所有文章都说我应该在这种情况下使用 mediator pattern 。 但在所有这些文章中,调解员 - 就​​像一个上帝阶级,它知道所有控制的一切,并决定在某些事件的情况下应该做什么。 如果我有5-6个控制器 - 一切都好。 但是如果我有20或40个控制器呢?我想在这种情况下,调解员类将成为一个怪物。用它做一些事情很难(修改或添加新功能)。

是否还有其他模式或调解员的好例子,这有助于解决这种情况?

PS:很抱歉,如果这个话题已经存在问题 - 有很多同名的问题,那么从所有这些话题中找到我真正需要的东西就不那么容易了。

5 个答案:

答案 0 :(得分:3)

Mediator在这里确实是正确的选择,但是有另一种方法可以使用OBSERVER模式,它可以让你保持逻辑分离。 (cb2观察cb1并做出适当的反应,cb3-> cb2等)。

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

答案 1 :(得分:1)

尝试将属于自定义组件的组件分组(扩展JComponent或JPanel)。这些自定义组件会监听其子项的事件,并在必要时更新其他子项( - >它们将成为Mediators)。自定义组件还可以触发自己的自定义事件,从而通知其父级Mediator。

答案 2 :(得分:0)

Mediator pattern - Wiki

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

当我以前学习模式时,这段代码是最好的。简单而有效......对于您所描述的内容我是使用 Mediator模式

答案 3 :(得分:0)

使用不同的操作作为策略Strategy Pattern并从 Mediator 调用某个策略,这样如果您需要明天添加更多控制器,则只需要更改几行代码

答案 4 :(得分:0)

gof书说:

“......相关模式

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

同事可以使用Observer(293)模式与中介进行通信。 ......“。

我怀疑观察者与调解员或门面的组合将会很好地运作。

请记住,设计模式的一个特质就是每次实现它们都是不同的。