我正在尝试开发一个应用程序,如果PartNumber中有任何更改,人们将收到通知。它是基于Spring的应用程序。以下是代码段。
我在SaveSubscriptionIF
中抽象了存储机制。存储和检索的实际细节位于此接口的实现类中。实现类将由Spring注入。
外部应用程序调用我的setState()
方法 - 传递新信息。
store.getObservers()
方法返回Map
,其中包含观察者和要更新的相应信息。
到目前为止一切顺利。我对store.getObservers()
的实施部分感到震惊。此方法实现需要state
数据 - 即从外部应用程序传递的新信息。
如何将'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 :(得分:3)
我想我明白你的意思。
通常在观察者模式中,更改的值将作为创建的Event对象中的参数传递。
因此,例如,你可以创建一个StateChangedEvent
类,其中包含一个值 - state。
然后,你的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...
}
如果我误解了这个问题,我很抱歉,但这似乎就是你所要求的。
答案 1 :(得分:2)
通过观察者的方法将数据传递给观察者。所以修改你的界面:
public ObserverIF {
void update(List<PartInformationVO>, Object state);
}