我正在尝试使用JDK Observer/Observable实现观察者模式,但是我很难看到在包含bean属性的bean上使用它的最佳方法。让我给你一个具体的例子:
需要观察更改(在任何属性中)的主bean是...
需要观察更改(在任何属性中)的主bean是...
public class MainBean extends Observable {
private String simpleProperty;
private ChildBean complexProperty;
...
public void setSimpleProperty {
this.simpleProperty = simpleProperty;
setChanged()
}
}
然而,当我想要为ChildBean
中的任何内容设置新值时,它不会触发MainBean
中的任何更改:
...
mainBean.getComplexProperty().setSomeProperty("new value");
...
我认为更明显的解决方案是将ChildBean
也设置为可观察对象,并使MainBean
成为ChildBean
的观察者。但这意味着我需要明确地在ChildBean
上调用notifyObservers,如下所示:
...
mainBean.getComplexProperty().setSomeProperty("new value");
mainBean.getComplexProperty().notifyObservers();
mainBean.notifyObservers();
...
我应该在mainBean上调用notifyObservers()吗?还是应该在complexProperty上进行级联调用,并在mainBean中触发notifyObservers()呢?
这是正确的做法吗?还是有更简单的方法?
ObservableCollection
、ObservableSet
和ObservableMap
,以便与ChangePropertySupport
连接。非常类似于这个!:-) 在bean构造期间,我使用final ObservableCollection
注册CollectionListener
,它们对任何更改执行firePropertyChange
。这样,bean上的所有PropertyChangeListener
都可以看到Collection
属性的更改。 - fommil