SpringMVC中的观察者模式

观察者接口Observer

public interface Observer {
    public void execute(Map<String, Object> paras) throws ServerException;
    public Boolean isAsyn();
}

1、paras为观察者观察时接收的对象,通常使用Map封装,或给每个观察事件都定义一个参数类用来封装不同的事件所需要信息

2、isAsyn 判断是否异步,如果是异步,就需要重新开一个线程

抽象对象AbstractObserver

protected Boolean asyn = false;

    public Boolean getAsyn() {
        return asyn;
    }
    public void setAsyn(Boolean asyn) {
        this.asyn = asyn;
    }

定义事件处理类EventManager,统一管理观察者

    private Map<String, List<Observer>> events;

    public void dispatchEvent(String eventName, Map<String, Object> paras) throws ServerException {
        if (events == null || events.isEmpty()) {
            return;
        }
        List<Observer> observers = events.get(eventName);
        for(Observer observer : observers) {
            System.out.println("eventName: " + eventName);
            System.out.println("isAsyn: " + observer.isAsyn());
            if (observer.isAsyn()) {
                EventManagerThread eventManagerThread = new EventManagerThread(observer, paras);
                Thread thread = new Thread(eventManagerThread);
                thread.start();
            } else {
                observer.execute(paras);
            }
        }
    }

1、这里使用的思想是在程序运行时将所有的观察者注册到事件管理类中

2、当事件发生时,被观察者需要提供事件信息,以及相应的事件的观察者的名字

3、在dispatchEvent方法中根据事件观察者名,调用相应的处理方法


在application.xml中配置观察者

    <bean id="eventManager" class="xxx.EventManager">
        <property name="events">
            <map>
                <entry key="recordSprintUserStatusEvent">
                    <list>
                       <ref bean="recordSprintUserStatus"/>
                    </list>
                </entry>
                <entry key="cacadeUpdateUserStory">
                    <list>
                       <ref bean="cacadeUpdateUserStory"/>
                    </list>
                </entry>
            </map>
        </property>
    </bean>

1、entry中的key值就是各个观察者的名字,eventManager根据名字调用相应的观察者

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值