可以先阅读 使用观察者模式监听Map值的改变
1. 数据库表 sys_params
数据库为: oracle 10g2
create table SYS_PARAMS ( PARAM_ID VARCHAR2(36) PRIMARY KEY, PARAM_NAME VARCHAR2(20) not null, PARAM_VALUE VARCHAR2(20) not null, PARAM_DESC VARCHAR2(100) );
INSERT INTO SYS_PARAMS VALUES (SYS_GUID(), 'a定时任务时间', TO_CHAR(SYSDATE, 'yyyy-MM-dd HH24:mi:ss'), ''); COMMIT;
2. 实体类 SysParamsPO, 实体类即为观察者对象
import java.util.Observable; import java.util.Observer; public class SysParamsPO implements Observer { // 主键 private String paramId; // 系统参数名 private String paramName; // 系统参数值 private String paramValue; // 描述 private String paramDesc; @Override public void update(Observable o, Object arg) { System.out.println("update:" + arg); } // 省略 getter()/setter() }
3. 定义一个全局Map,用来存放系统参数
import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public final class CommonConstants { private CommonConstants() { } /** 系统参数 */ public static Map<String, Object> sysParamsMap = new ConcurrentHashMap<String, Object>(16); }
4. 在servlet的init()方法中查找表 SYS_PARAMS 的数据,存入CommonConstants.sysParamsMap中
(这里就不写了,比较简单)
5. 定义一个被观察者对象(Observable),用来监控对系统参数的新增
import java.util.Iterator; import java.util.Map; import java.util.Observable; import java.util.Observer; import java.util.concurrent.ConcurrentHashMap; public final class SysParamsObservable extends Observable { private static final SysParamsObservable instance = new SysParamsObservable(); protected Map<String, Object> obs = new ConcurrentHashMap<String, Object>(); private SysParamsObservable() { } public static SysParamsObservable getInstance() { return instance; } /** * @Title: doBusiness * @Description: 当被观察者有Changed时,通知观察者 * @param arg * @author * @date 2013-5-2 */ public void doBusiness(Object arg) { // 设置修改状态 super.setChanged(); // 通知观察者 this.notifyObservers(arg); } /** * @Title: notifyObservers * @Description: 模仿不同的业务通知对应业务的观察者 * @param arg * @see java.util.Observable#notifyObservers(java.lang.Object) * @author */ public void notifyObservers(Object arg) { String msg = arg.toString(); String[] msgs = msg.split(":"); if (obs.containsKey(msgs[0])) { Observer ob = (Observer) obs.get(msgs[0]); ob.update(this, msgs[1]); } } /** * @Title: addObserver * @Description: 添加一个观察者 * @param name * 观察者名称 * @param o * 观察者对象 * @author * @date 2013-5-2 */ public synchronized void addObserver(SysParamsPO po) { System.out.println("添加一个系统参数:" + po.getParamName()); CommonConstants.sysParamsMap.put(po.getParamName(), po.getParamValue()); } /** * @Title: updateObserver * @Description: 修改一个观察者 * @param name * 观察者名称 * @param o * :观察者对象 * @author * @date 2013-5-2 */ public synchronized void updateObserver(String name, Observer o) { Iterator<String> it = obs.keySet().iterator(); String key = null; while (it.hasNext()) { key = it.next(); if (key.equals(name)) { System.out.println("被修改的key为:" + key); obs.put(key, o); break; } } } /** * @Title: deleteObserver * @Description: 删除观察者 * @param o * : 观察者对象 * @see java.util.Observable#deleteObserver(java.util.Observer) * @author */ public synchronized void deleteObserver(Observer o) { if (obs.values().contains(o)) { Iterator<String> it = obs.keySet().iterator(); String key = null; while (it.hasNext()) { key = it.next(); if (obs.get(key).equals(o)) { System.out.println("被删除的key为:" + key); obs.remove(key); break; } } } } }
其中的方法addObserver,即为监控新增操作的方法。
6. service层方法
先插入数据库中,再放入CommonConstants.sysParamsMap中
public void add(SysParamsPO po) throws Exception { po.setParamId(UUID.randomUUID().toString()); sysparamsDAO.insert(po); // 实例化一个被观察者 SysParamsObservable able = SysParamsObservable.getInstance(); // 添加观察者 able.addObserver(po); logger.info("添加后,系统参数为:" + CommonConstants.sysParamsMap); }
7. action 层方法(Struts2框架)
public void addSysParamsPO() { try { sysparamsService.add(sysParamsPO); } catch (Exception e) { e.printStackTrace(); } }
8. 新增系统参数页面
运行结果:
添加一个系统参数:a11 2013-05-07 15:13:36,069 [INFO] cn.com.do1.component.sysparams.sysparams.service.impl.SysparamsServiceImpl.add(SysparamsServiceImpl.java:107) 添加后,系统参数为:{a11=1.1, a定时任务时间=2013-05-07 15:11:01}
数据库数据 :
相关推荐
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
在`ObserverPattern-master`这个压缩包中,可能包含了一个关于观察者模式的示例项目,里面可能通过创建自定义的观察者和被观察者类,展示了如何在不使用系统提供的通知或KVO的情况下实现观察者模式。通过分析和学习...
例如,在Web开发中,可以使用观察者模式处理用户交互事件,当用户触发某个操作时,相关的监听器(观察者)会得到通知并执行相应的逻辑。 总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助...
3. **事件驱动**:观察者模式非常适合构建事件驱动的系统,比如GUI框架,当用户进行交互时,事件可以被广播给多个监听者。 在编程实践中,观察者模式常用于以下场景: - **GUI组件**:当用户界面中的一个元素发生...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
观察者模式是软件设计模式中的一种行为模式,它允许一个对象,称为"主题",维护一个依赖于它的对象列表,这些对象被称为"观察者"。当主题的状态发生改变时,它会通知所有观察者,使它们能够自动更新自己。这种模式在...
观察者模式(Observer Pattern)是其中的一种行为设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个“IOS 观察者模式实例Demo”中...
观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理、发布/订阅系统、以及...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动的编程...
- **使用观察者模式**:在`main`函数中,创建主体和观察者对象,将观察者添加到主体中,然后主体状态改变时调用`notify`方法,触发观察者的更新。 ```cpp int main() { ConcreteSubject subject; ConcreteObserver...
通过上述讨论,我们可以看到观察者模式在Java中的应用非常灵活,能够帮助我们构建松耦合、可扩展的系统。无论是简单的小型项目还是大型的企业级应用,都可以从中受益。理解并熟练运用观察者模式,可以提升代码的可...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动编程,使得多...
1. **解耦**:通过引入观察者模式,可以将对象之间的依赖关系抽象出来,使得对象之间无需直接引用彼此,从而降低了系统的耦合度。 2. **灵活性**:新的观察者可以很容易地添加到系统中,而无需修改现有代码。 3. **...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为设计模式,它允许对象在状态改变时通知其他依赖它的对象,而无需显式地调用这些对象。在这个“观察者体系结构微博”项目中,我们...