java - 使用 OO 观察者模式而不更新从中发起更改的对象

标签 java swing oop jtextfield observer-pattern

我正在构建一个包含 GUI 和模型的应用程序。当模型中的字段发生更改时,我正在使用观察者模式(使用 java 的内置接口(interface))来更新 GUI。

这通常工作正常,但我有一种情况,模型中的特定 String 变量(特别是文件的 url)可以通过两个单独的 JTextFields(swing)更改,其内容实际上反射(reflect)了有问题的模型变量。

我遇到的问题是这些 JTextField 之一的更改需要引起对模型状态和另一个 JTextField 的内容的更新。我的模型确保仅在模型状态发生变化时才向观察者发送通知。但是,修改 JTextFields 的过程涉及清空其文本内容然后将其重置。

无需赘述太多细节,其结果是更新/通知过程陷入无限循环。我通过为这个特定问题搁置观察者模式暂时解决了这个问题,但我想知道是否有人可以建议一种巧妙的方法来确保特定组件不会被源自同一组件的更改“更新”。

感谢任何帮助。

最佳答案

Java SE Application Design With MVC 中所述, 这是几个 Issues With Application Design 之一.建议的方法依赖于 PropertyChangeListener,如图所示 here . PropertyChangeEvent 包括旧值和新值以供引用。

关于java - 使用 OO 观察者模式而不更新从中发起更改的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623897/

相关文章:

javascript - 返回值并保留 javascript 对象的成员?

java - 如果位数不固定,如何限制小数点后的位数

java - Apache 卡夫卡 : How to find out consumer group of a topic?

java - 在 DefaultListModel 与 ConcurrentHashMap 中存储数据

java - GridBagLayout 向列添加额外空间

Java,paintComponent中的setForeground融化了CPU

c# - 我破坏了封装吗?

ios - getter setter 模型类 Oop

java - 考虑将序列化的 java 对象作为 JSON 存储到 cassandra 中。问题是什么?

java - 为什么 Java 不支持结构体? (纯属好奇)