2010-07-09 2 views
1

Я пытаюсь разработать приложение, в котором люди получат уведомление, если есть какие-либо изменения в PartNumber. Это приложение на основе Spring. Ниже приведен фрагмент кода.Реализация шаблона наблюдателя с использованием впрыска весенней зависимости

Я отделил механизм хранения здесь в SaveSubscriptionIF. Фактические данные о хранении и извлечении находятся в классе реализации этого интерфейса. Класс реализации будет введен в Spring.

Внешнее приложение вызывает мой метод setState()- передавая новую информацию.

Метод store.getObservers() возвращает мне Map, у которых есть наблюдатели и соответствующая информация для обновления.

Пока все хорошо. Я поражен частью реализации store.getObservers(). Для реализации этого метода необходимы данные state - то есть новая информация, переданная из внешнего приложения.

Как передать данные состояния в класс реализации «SaveSubscriptionIF»?

public class PartNumberSubject implements Observable { 
    private SaveSubscriptionIF store; 
    private Object state; 
    @Override 
    public void addObserver(final ObserverIF o, final Object subscriptionDetails) { 
     store.addObserver(o, subscriptionDetails); 
    } 
    @Override 
    public void notifyObservers() { 
     @SuppressWarnings("unchecked") 
     final Map<ObserverIF, List<PartInformationVO>> observers =(Map<ObserverIF,List<PartInformationVO>>) store     .getObservers(); 
    for (final Entry<ObserverIF, List<PartInformationVO>> observer : observers 
         .entrySet()) { 
    observer.getKey().update(observer.getValue()); 
    } 
    } 
    @Override 
    public void setState(final Object state) { 
    this.state = state; 
    notifyObservers(); 
    } 
    } 
+0

@Karthik: Интерфейс Observer не является java.lang. Я создал свой собственный интерфейс здесь. – HanuAthena

ответ

3

Я думаю, что понимаю, что вы имеете в виду.

Обычно в шаблоне наблюдателя значение, которое было изменено, передается как параметр в созданном объекте Event.

Так, например, вы можете создать класс StateChangedEvent, который имел значение в нем - состояние.

Тогда ваш метод SetState будет выглядеть следующим образом:

public void setState(final Object state) { 
    this.state = state; 
    notifyObservers(state); 
} 

И notifyObservers:

public void notifyObservers(Object state) { 
    StateChangedEvent event = new StateChangedEvent(state); 
    // Pass this event into each observer which you have subscribed... 
} 

Я извиняюсь, если я неправильно понял вопрос, но это, кажется, то, что вы» повторно прошу.

2

Передача данных наблюдателям осуществляется с использованием методов наблюдателя. Поэтому измените свой интерфейс:

public ObserverIF { 
    void update(List<PartInformationVO>, Object state); 
} 
+0

На самом деле, мне нужен только метод getObservers(). Потому что, получая список наблюдателей, мне нужно сделать некоторую фильтрацию - сравнение старых и новых значений. Метод update() пока прекрасен - независимо от того, какая информация должна быть известна, передаю это - List HanuAthena

Смежные вопросы