簡體   English   中英

使用Spring依賴注入的觀察者模式實現

[英]Observer pattern implementation using Spring dependency injection

我正在嘗試開發一個應用程序,如果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();
    }
    }

我想我明白你的意思。

通常,在觀察者模式中,更改后的值將作為所創建的Event對象中的參數傳遞出去。

因此,例如,您可以創建一個StateChangedEvent類,其中包含一個值StateChangedEvent

然后,您的setState方法將如下所示:

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

並通知:

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

很抱歉,如果我沒有正確閱讀問題,但這似乎就是您要問的問題。

通過觀察者的方法將數據傳遞給觀察者。 因此,修改您的界面:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM