以下是我当前代码的简化版本。我很确定我在语法方面没有做任何错误的事情,而且我找不到我的概念错误。
这是我试图实现的一种观察者模式。我负担不起从 Java.utils.observable 继承,因为我的类已经很复杂并且从另一个类继承。这里有两个部分:
有一个 Notifier 类实现 Runnable :
public class Notifier implements Runnable{
public void run()
{
while(true)
{
MyDataType data = getData();
if(data.isChanged()==true)
{
refresh();
}
}
}
}
然后是我的主类,它需要响应对 MyDataType 数据的更改。
public class abc {
private MyDataType data;
public void abc(){
Notifier notifier = new Notifier();
Thread thread = new Thread(notifier);
thread.start();
}
public MyDataType getData(){
return this.data;
}
public void refresh(){
MyDatatype data = getData();
//Do something with data
}
}
问题:发生的事情是通知程序在“数据”更改时调用 refresh()。但是在 refresh() 中,当我执行 getData() 时,我得到的是旧版本的“数据”!我应该提一下,代码的其他部分也调用了 refresh() 函数。
- 我在看什么?
- 这个问题还有其他更好的解决方案吗?
- 如果我不能应用开箱即用的默认 Java 实现,我应该如何设计 Subject-Observer 系统?