[英]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.