`
城的灯
  • 浏览: 150130 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于java bean的观察者模式(基于bean的事件)

    博客分类:
  • 2011
阅读更多
观察者模式大家应该都很熟悉了,但是基于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");
	}
}
1
1
分享到:
评论

相关推荐

    基于java语言开发的物流配货网

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的,数据库的使用、数据库的表结构设计。 基于spring+springMvc+mybatis 开发的企业...

    基于java语言,使用springboot框架开发的学生考勤管理系统.7z

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的、:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等。 基于java语言,使用...

    正确使用Java事件通知

    通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易掉进一些陷阱。本文介绍了我自己在各种情形下,不小心制造的一些常见错误。  Java 事件通知  让...

    掌握Spring设计模式:Java工程师必备指南

    代理模式和观察者模式在Spring AOP和事件驱动模型中得到了广泛应用,提供了强大的切面和事件处理能力。策略模式和模板方法模式则分别提供了资源访问的灵活性和统一处理逻辑的框架。最后,责任链模式在Spring的AOP...

    【基于java-ssm】大学生兼职论坛管理系统实现源码+lw+部署文档+讲解

    能学到什么:①了解工厂模式、策略模式、观察者模式等在 Spring 框架中的实现方式;②深入理解 IOC、AOP、代理、切面、循环依赖等设计与实现原理。 阅读建议:本资源旨在通过开发简化版 Spring 框架来学习其原理和...

    java面试题库2021.pdf

    目录 一、 JavaSE 部分 1、 Java 基础 ①Java 基础部分(基本语法, Java 特性等) ②关键字 ③面向对象 ④集合部分 2、 Java 高级知识 ①线程 ...②观察者模式 4、 所有模式汇总 十、 场景题 十一、 UML

    Java 基础核心总结 java全方面基础知识 java开发人员必备

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    基于JavaWeb的物业管理系统

    能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发java web 学习其原理和内核,不仅是代码编写实现也更...

    Java初学者入门教学

    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面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    Java面试可能问的问题.docx

    观察者模式 装饰模式 3.Spring的优越性 https://blog.csdn.net/hht006158/article/details/80181207 4.SpringMVC注解 @Controller @RestController @RequestMapping @RequestBody @ResponseBody @RequestParam @...

    java 编程入门思考

    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 桌面颜色 ...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    使用用户界面组件模型和JSF事件模型,包括支持可添加书签的页面以及POST、REDIRECT、GET模式。使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来...

    java联想(中文)

    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面试800题

    template模板方法模式、memento备忘录模式、observer观察者模式、command命令模式、state状态模式、strategy策略模式、mediator调停者模式、interpreter解释器模式、visitor访问者模式、chain of responsibility责任...

    JAVA_Thinking in Java

    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 桌面颜色 ...

Global site tag (gtag.js) - Google Analytics