观察者模式大家应该都很熟悉了,但是基于java bean的观察者模式不知道大家熟悉不!这个是我在看C3P0数据库连接池源码的时候发现的,现在就简要的记录一下,防止自己遗忘,同时给在看这篇文章的你一些帮助。
这篇文章中涉及的接口和类是java.beans包下面PropertyChangeListener,PropertyChangeSupport,PropertyChangeEvent。这几个就不详细的介绍了,如果不是很明白可以去看下API。
首先创建一个监听器,当有事件发生时就会触发propertyChange方法,并且该事件作为参数传递给该Listener。
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class ChangeListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt.getPropertyName());
System.out.println("NewValue="+evt.getNewValue());
System.out.println("OldValue="+evt.getOldValue());
System.out.println(evt.getPropagationId());
System.out.println("-------------------------");
Object bean=evt.getSource();
}
}
然后创建一个事件触发管理器,通过它把事件传递给Listener.
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class EventManager {
PropertyChangeSupport PCS=new PropertyChangeSupport(this);
//add listener
public void addPropertyChangeListener(PropertyChangeListener pcl){
PCS.addPropertyChangeListener(pcl);
}
//Trigger property change events
protected void triggerPropertyChange(String propertyName,Object oldValue,Object newValue){
PCS.firePropertyChange(propertyName, oldValue, newValue);
}
//remove listener
protected void removeProtertyChange(PropertyChangeListener pcs){
PCS.removePropertyChangeListener(pcs);
}
}
接下来创建一个普通的bean,在这个bean的set方法中使用事件管理类来触发事件。
public class Bean extends EventManager {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
int oldValue=this.id;
this.id = id;
triggerPropertyChange("id", oldValue, id);
}
public String getName() {
return name;
}
public void setName(String name) {
String oldValue=this.name;
this.name = name;
triggerPropertyChange("name", oldValue, name);
}
}
最后就是一个测试类
public class Test {
public static void main(String args[]){
Bean bean=new Bean();
//把监听器注册到这个bean上
bean.addPropertyChangeListener(new ChangeListener());
bean.setId(1111);
bean.setName("gary");
}
}
分享到:
相关推荐
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的,数据库的使用、数据库的表结构设计。 基于spring+springMvc+mybatis 开发的企业...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的、:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等。 基于java语言,使用...
通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易掉进一些陷阱。本文介绍了我自己在各种情形下,不小心制造的一些常见错误。 Java 事件通知 让...
代理模式和观察者模式在Spring AOP和事件驱动模型中得到了广泛应用,提供了强大的切面和事件处理能力。策略模式和模板方法模式则分别提供了资源访问的灵活性和统一处理逻辑的框架。最后,责任链模式在Spring的AOP...
能学到什么:①了解工厂模式、策略模式、观察者模式等在 Spring 框架中的实现方式;②深入理解 IOC、AOP、代理、切面、循环依赖等设计与实现原理。 阅读建议:本资源旨在通过开发简化版 Spring 框架来学习其原理和...
目录 一、 JavaSE 部分 1、 Java 基础 ①Java 基础部分(基本语法, Java 特性等) ②关键字 ③面向对象 ④集合部分 2、 Java 高级知识 ①线程 ...②观察者模式 4、 所有模式汇总 十、 场景题 十一、 UML
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发java web 学习其原理和内核,不仅是代码编写实现也更...
13.16.2 事件和接收者类型 13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 ...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
观察者模式 装饰模式 3.Spring的优越性 https://blog.csdn.net/hht006158/article/details/80181207 4.SpringMVC注解 @Controller @RestController @RequestMapping @RequestBody @ResponseBody @RequestParam @...
13.16.2 事件和接收者类型 13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 ...
使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来...
使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来...
13.16.2 事件和接收者类型 13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 ...
template模板方法模式、memento备忘录模式、observer观察者模式、command命令模式、state状态模式、strategy策略模式、mediator调停者模式、interpreter解释器模式、visitor访问者模式、chain of responsibility责任...
13.16.2 事件和接收者类型 13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 ...