根据不同的应用程序状态处理不同的UI行为

时间:2013-08-15 22:47:13

标签: oop user-interface stack state

我的应用程序有少数几个共享一个UI的状态。问题是,根据应用程序状态,UI的组件将执行非常不同的操作。

在一种状态下,鼠标悬停在组件上可能会显示工具提示,而在另一种状态下,它可能会成为“添加到列表”或某种此类行为的方式。

目前,我有一个包含许多组件子类的UI类。 UI将回调传递给组件,它们在与之交互时可能会调用。截至目前,他们的行为由UI中的一个简单的switch语句决定,该语句检查状态并返回行为,但这似乎有可能不必要地增加复杂性。

我想到的解决方案是每个州都有一个不同的UI类,其行为适合其方法中包含的状态。另一种方法是在UI中简单地使用方法的“字典”,其中可以调用方法,如

doSomething[currentState]()

问题在于我必须在UI中为每个状态创建相同的方法。

最终的解决方案是简单地拥有一个没有自己处理逻辑的UI。 UI的所有组件都从“状态管理器”获得回调,然后“状态管理器”又知道要调用的UI方法。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

应用程序通常由一些模块组成,每个模块都应具有相关组件。

在你的情况下,每个州应该是不同的模块。 “在一种状态下,鼠标悬停在组件上可能会提示工具提示,在另一种状态下,它可能会成为'添加到列表'或某种此类行为的方式。”因此,行为可以在每个模块中实现,并且模块具有组件(通过扩展基类或组合,或其他方式)。

这可以使代码清除,你可以更容易地替换模块,但更多的类。

我认为使用状态决定行为应该用在一个非常低级的代码片段和一个模块中。