在不直接相互了解的对象上使用观察者模式

时间:2010-11-26 02:08:06

标签: java observer-pattern observers

这是我的Observer和Observable接口

public interface Observable<T> {
    void addObserver(Observer<T> o);
    void removeObserver(Observer<T> o);
    void removeAllObservers();
    void notifyObservers();
}


public interface Observer<T> {
    public void update(Observable<T> o);
}

如果我有两个相互了解的课程,这些工作,但是,我如何处理如下情况。

  • RootComposite(创建单词列表)
  • WordListComposite(创建一个单词)
    • WordDialog

现在,如果RootCompoiste需要了解WordListComposite中的更改,我可以像下面那样实现它:

public class RootComposite extends Composite implements Observer<WordListComposite > {

public RootComposite() {

WordListComposite wl = new WordListComposite();
wl.addObserver(this);

}

...

@Override
public void update(WordListComposite o) {
    this.lblMessage = o.getMessage();
}

...
}

这将按预期工作。

但RootComposite如何从WordDialog接收更新?

在这种情况下,最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

WordListComposite还可以实现Observer接口和WordDialog的Observable接口。 WordListComposite可以观察WordDialog,当它收到来自WordDialog的通知时,会触发向RootComposite(正在观看WordListComposite)的通知。基本上你有一个动作火,然后只是在树上发送通知。