使用Spring依赖注入的观察者模式实现
我正在尝试开发一个应用程序,其中如果在PartNumber中有任何更改,人们将会收到通知。它是基于Spring的应用程序。以下是代码片段。使用Spring依赖注入的观察者模式实现
我已经在SaveSubscriptionIF
中抽象了存储机制。存储和检索的实际细节在这个接口的实现类中。 Spring的实现类将被注入。
外部应用程序调用我的setState()
方法 - 传递新信息。
store.getObservers()
方法返回我Map
其中有观察员和相应的信息来更新。
到目前为止这么好。我碰到了store.getObservers()
的实现部分。此方法实施需要数据 - 即从外部应用程序传递的新信息。
如何将'状态'数据传递给'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
类在它有一个值 - 状态。
然后,你的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...
}
对不起,如果我误解了问题,但这个似乎是你”再问。
将数据传递给观察者是通过观察者的方法完成的。所以修改你的接口:
public ObserverIF {
void update(List<PartInformationVO>, Object state);
}
其实,我只需要getObservers()方法。因为,在获取观察者列表时,我需要做一些过滤 - 比较新值和新值。 update()方法到目前为止都很好 - 无论需要知道什么信息,都要通过 - List
@Karthik:Observer接口不是java.lang的。我在这里创建了自己的界面。 – HanuAthena 2011-07-11 06:13:16