SpringMVC中的观察者模式
来源:互联网 发布:mac两个窗口并列 编辑:程序博客网 时间:2024/05/17 02:04
观察者接口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 0
- SpringMVC中的观察者模式
- YUI中的观察者模式
- symbian 中的观察者模式
- Java 中的观察者模式
- java中的观察者模式
- C#中的观察者模式
- JavaScript中的观察者模式
- Java中的观察者模式
- JDK中的观察者模式
- GUI中的观察者模式
- java 中的观察者模式
- 生活中的观察者模式
- java中的观察者模式
- Java中的观察者模式
- c++ 中的观察者模式
- Android中的观察者模式
- java中的观察者模式
- java 中的观察者模式
- NYOJ 子串和 44
- poj 1753(位压缩+搜索)
- String,StringBuffer与StringBuilder的区别??
- XmlHttpRequesterror:OriginnullisnotallowedbyAccess-Control-Allow-Origin
- Device Compatibility
- SpringMVC中的观察者模式
- Shell脚本的控制语句
- JNI字段描述符“([Ljava/lang/String;)V”
- Mac 显示隐藏文件
- HDOJ 最大连续子序列 1231
- 第314(33W+4)
- Servlet中的跳转(redirect和forward)
- 云计算核心技术剖析学习笔记_1
- Win7,Ubuntu14.04 amd64下安装CentOS7三系统后无法启动CentOS7