Использование шаблона наблюдателя на объектах, которые не знают друг о друге напрямую - PullRequest
0 голосов
/ 26 ноября 2010

Вот мои Наблюдатель и Наблюдаемые интерфейсы

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 голосов
/ 26 ноября 2010

WordListComposite также может реализовывать интерфейс Observer и WordDialog интерфейс Observable. WordListComposite может наблюдать WordDialog и, когда он получает уведомление от WordDialog, инициирует уведомление RootComposite (который наблюдает за WordListComposite). По сути, у вас есть огонь действия, а затем просто отправьте уведомления вверх по дереву.

...