问题描述
我遇到了一个涉及应用程序许多不同组件的复杂问题。我希望足够清楚。
在我的应用程序中,应用程序对象(单例)为许多活动提供了一个模型(也是单例)。主要活动是向用户显示定时数据列表。这些数据来自模型。
我也有一个小部件,我希望它:
-在模型中(通过GUI)更新定时数据时更新
-随着时间的流逝,更新为仅显示列表中的前两个定时数据,删除现在已过时的数据。
为了达到第二个目标,我设计了一项服务,要求模型获取一些数据,并使用计时器在第一个数据过期后唤醒,然后将其从列表中删除,然后向意图有一些数据的小部件发送广播,即小部件将显示。
这很好。
但是我还希望窗口小部件在模型中的数据更改时立即更新(不是因为时间过去了,而是因为用户通过GUI要求其他一些数据)。
但是,这是我的问题:
模型如何告诉小部件进行更新?一切就绪,服务可以更新小部件,但是引擎无法知道是否有小部件。我不希望模型调用该服务,因为可能没有小部件,也不需要为该服务进行其他处理。
如何重新设计这种互动?
我真的很想念这里的东西。
解决方法
您可以使用Observer模式,使引擎在应用程序更新时向应用程序中感兴趣的任何组件触发事件,而事件产生组件却不了解事件消费者。
作为参数发送的Event对象应包含有关该事件的所有相关信息,以便UI小部件自行更新等,以便仅需要传递此抽象的“ event \”对象-并且您的图层不会出血彼此。