2012-04-16 54 views
5

我有一个GUI应用程序与很多控制。它们中的大部分都有事件和控制逻辑地连线到每个地方。 例如,我有5个组合框。 如果我选择在CB1CB3他们CB2东西必须改变其可用值的列表。 如果我选择cb2ch4,他们cb5必须加载其可用值的列表。 我在网上发现的所有文章都说我应该在这种情况下使用中介模式。 但是在所有这些文章中,调解者 - 就像是一个神类,它知道所有控制的一切,并决定在发生某些事件时应该做什么。 如果我有5-6对照 - 一切都很好。 但是如果我有像20或40控制的东西呢?我猜在这种情况下,调解员班将成为怪物。很难做到这一点(修改或添加新功能)。使用哪种设计模式(我需要类似中介模式的东西)?

有没有其他模式,或调解员pathern,这将有助于解决这种情况的好例子?

PS:对不起,如果已经有关于这个话题的问题 - 有很多同名的问题,以至于找到我真正需要的所有这些话题都不是那么容易的。

+2

事实上,20-40个控件可能会导致一个非常复杂的调解器,然而,调解器有着明确的责任,比在许多类中分散逻辑更容易理解。*红旗*在你的问题中不是风险由于20-40的控制,而是一个GUI设计,允许20-40控制。 – Fuhrmanator 2012-04-17 15:40:21

+0

** Fuhrmanator **,我有一个大的形式与一些工作的工作情况(发票,合同等)。所以,有很多领域,用户必须与之合作。对于用户来说,使用一个屏幕信息更方便。所以,如果我会试着说一些类似“好的,现在你会有3 \ 5窗体\屏幕\窗口。在第一个填充这些信息,第二个填充这些信息。”用户会发现一些其他开发人员\公司,而不是改变那里的习惯。而且,无论如何,这个主题是另一个话题,我想:) – 2012-04-19 10:20:29

回答

2

调解员确实是这里的正确选择,但是有另一种选择使用OBSERVER模式,这将允许您保持逻辑分离。 (cb2观察cb1并适当反应,cb3-> cb2等)。

随着OBSERVER模式,你将不得不一次链接两个控件,这就像链。

0

Mediator pattern - Wiki

如果从维基百科,但它的简单,很容易理解。

当我用来研究模式时,这段代码是最好的。通过且有效的简单...是什么你描述我会使用一个Mediator模式

0

使用不同的动作为战略Strategy Pattern中保调用一定的策略,让你只如果您明天需要添加更多控制器,则需要更改几行代码。

1

尝试对属于自定义组件(扩展JComponent或JPanel)的组件进行分组。这些自定义组件倾听他们的孩子的事件,并根据需要更新其他孩子( - >他们成为调解人)。自定义组件也可以触发自己的自定义事件,从而通知其父调解器。

0

GOF书中说:

“......相关模式

门面(185)从调解不同之处在于它抽象对象的子系统提供了更方便的接口它的协议是单向的,即是,Facade对象提出子系统类的请求,但反之亦然。相比之下,Mediator支持同事对象不提供或不能提供的合作行为,协议是多方向的。

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

我怀疑是观察者,要么调解或立面的组合将工作做好。

记得设计模式的特质之一是,每次你实现同一时间,他们是不同的。