Java MVC-шаблон с Observer / Observable - PullRequest
3 голосов
/ 13 января 2011

Привет,

У меня проблема в приложении, которое я встраиваю. Чтобы дать сценарий, в котором я нахожусь. У меня есть два этих контроллера, оба они наследуют одну и ту же модель, инициализированную из основного контроллера.Все контроллеры имеют свои представления, но у меня есть только одна модель.

Проблема в том, что.Когда когда-либо происходят изменения с этой моделью.Как я могу уведомить другой контроллер (из двух контроллеров), что произошло обновление?Я собираюсь использовать Observer / Observable или PropertyChangeEvent?И как, я немного запутался в реализации обоих компонентов архитектуры MVC.

Ваш ответ по этому вопросу высоко ценится.

Спасибо, Кирилл Х.

Ответы [ 3 ]

2 голосов
/ 13 января 2011

У меня был похожий случай, когда я использовал PropertyChangeSupport для прослушивания изменений модели. Я считаю, что лучший способ - это создать AbstractEntity, который содержит приватный PropertyChangeSupport и два открытых метода addPropertyListener, removePropertyListener и защищенный метод firePropertyChange . Эти методы будут использоваться как обертки для PropertyChangeSupport. Таким образом, ваши контроллеры должны просто добавитьPropertyListeners для прослушивания изменений общей модели.

Примечание:

  • Вы должны использовать один и тот же экземпляр модели для всех контроллеров.
  • Вам нужны следующие классы:
  • java.beans.PropertyChangeSupport
  • java.beans.PropertyChangeListener

Пример кода для
public void setValue(String value){
      String oldValue=getValue();
      this.value=value;
      firePropertyChange("value",oldValue,getValue()); 
}

1 голос
/ 13 января 2011

Я не вижу никаких проблем,

  • сделайте вашу модель observable и
  • наблюдателем вашего контроллера / с

Или представьтеlistener, если первое не звучит хорошо для вас.

1 голос
/ 13 января 2011

Ваши контроллеры должны просто слушать модель.(PropertyChange или что-то еще).Почему вы хотите, чтобы ваши контроллеры уведомляли себя?

Если это основной контроллер, о котором вы хотите уведомить, ему следует просто послушать модель.Разве это не сама инициализирует модель?

...