作用和反应定律很清楚:)。如果您尝试对更改做出反应,则无需区分用户和应用程序。我可以想象只有一个用例需要“区分”。应用程序显示某些数据的情况。在这种情况下,您可能拥有应用程序的数据模型。此模型中还有一些更改侦听器,应用程序 GUI 将通过为组件设置值来做出反应。并且。如果用户在 GUI 组件中选择任何内容。数据模型将通过改变值做出反应。在这种情况下,很容易在数据模型上设置某种只读状态,这将通知模型忽略来自观察对象的任何事件。此通知集应在 EDT 中运行,并且标记没有问题。小例子:
class ApplicationDataModel {
private Flag current = Flag.RW;
public void setData(ApplicationData data) {
current = Flag.RO;
setDataImpl(data);
notifyObservers();
current = Flag.RW;
}
public void reaction(Event e) {
if (flag = Flag.RO) return;
...
}
}
小心标记,不要忘记线程。如果你从另一个线程调用 setData ,那么 EDT 你会遇到麻烦。当然。对象的提取ApplicationData
必须在不同的线程中运行;)。一般来说,重新考虑您的应用程序的设计。