4

JDK Observer / Observableを使用してObserverパターンを実装しようとしていますが、プロパティとして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ことですChildBeanChildBeanただし、これは、次のように、でnotifyObserversを明示的に呼び出す必要があることを意味します。

...
mainBean.getComplexProperty().setSomeProperty("new value");
mainBean.getComplexProperty().notifyObservers();
mainBean.notifyObservers();
...

mainBeanでnotifyObservers()を呼び出す必要がありますか?または、complexPropertyカスケードを呼び出して、mainBeanでnotifyObservers()呼び出しをトリガーする必要がありますか?

これはこれを行うための適切な方法ですか、それとももっと簡単な方法がありますか?

4

2 に答える 2

2

Observable は、プロパティが変更されるたびに notifyObservers を呼び出す必要があります。

この例では:

mainBean は、Observable complexProperty の Observer になります。

complexProperty は、状態が変化するたびに notifyObservers を呼び出す必要があります。

mainBean も Observable である場合、その更新メソッド (complexProperty またはその他の Observable メンバーから通知を受け取る場所) は、notifyObservers を呼び出して、このイベントを構造にバブルアップさせる必要があります。

mainBean は、complexProperty.notifyObservers の呼び出しを担当するべきではありません。complexProperty はそれを行う必要があります。それ自体でのみ notifyObservers を呼び出す必要があります。

于 2012-08-03T22:58:06.660 に答える
0

MainBeanのプロパティChildBeanが変更されたときに を反応させたい場合、子をObservable.

setSomeProperty(...)プロパティが設定された後、notifyObservers に通知する必要があります。

于 2012-08-03T22:56:36.393 に答える