2010-07-09 130 views
1

我正在尝试开发一个应用程序,其中如果在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(); 
    } 
    } 
+0

@Karthik:Observer接口不是java.lang的。我在这里创建了自己的界面。 – HanuAthena 2011-07-11 06:13:16

回答

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 2010-07-09 12:45:30