`
城的灯
  • 浏览: 152409 次
  • 性别: 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
分享到:
评论

相关推荐

    观察者模式与JavaBeans事件

    实验中提到的“建立一个基于Bean事件的Internet气象观测站”,可能需要以下步骤: 1. 创建一个气象观测站类(WeatherStation),作为事件源。这个类将包含表示天气状况的属性,如温度、湿度等,并且当这些属性发生...

    基于JAVA框架设计模式的学生交互系统设计.pdf

    用户交互界面设计主要是使用JAVA技术中的迭代器模式、观察者模式等来设计用户交互界面。后端逻辑设计主要是使用struts2拦截器设计模式和spring中的工厂模式来设计后端逻辑。 知识点四:设计模式在学生交互系统设计...

    java观察者模式实现和java观察者模式演化

    在Java应用程序中,观察者模式广泛应用于事件监听、GUI组件更新、实时系统、消息传递和分布式事件驱动系统等领域。 例如,在Java Swing框架中,所有的GUI组件都是事件监听器,它们监听并响应用户的动作或系统事件;...

    基于Java的Message-Driven Bean EJB实例源代码.zip

    以下是对基于Java的Message-Driven Bean EJB实例源代码的详细解读: 1. **Message-Driven Bean(MDB)基础**: - MDB是EJB的一种类型,专门用于处理JMS消息。它们是无状态的,因此不需要维护会话状态。 - MDB通过...

    java事务设计模式

    Java事务设计模式是系统开发中不可或缺的一部分,尤其是在大型分布式系统中,确保数据的一致性和完整性至关重要。本设计模式主要关注如何在Java环境中有效地管理和协调事务,以满足ACID(原子性、一致性、隔离性、...

    基于java开发的后台管理系统

    【标题】:“基于Java开发的后台管理系统”是一个以Java编程语言为核心,专为初学者和学生设计的后台管理系统。这个系统充分利用了Java的SSM框架(Spring、SpringMVC、MyBatis)来构建,旨在帮助新手理解并掌握常规...

    基于JAVA框架设计模式的学生交互系统设计-2019年教育文档.docx

    - 观察者模式:常用于事件驱动编程,例如GUI组件中的监听器。当特定事件发生时,观察者会被通知并执行相应的操作,如按钮点击或键盘输入。 2. Struts2中的设计模式: - 拦截器设计模式:Struts2使用责任链模式,...

    Java 企业设计模式

    此外,本书可能还会涵盖一些特定于Java EE环境的模式,如 Session Bean 和 Message Driven Bean 在Java EE中的应用,以及如何利用设计模式来优化EJB(Enterprise JavaBeans)的性能和可维护性。 总的来说,深入理解...

    基于JAVA框架设计模式的学生交互系统设计-2019年教育文档.pdf

    同时,观察者模式在事件驱动编程中十分常见,如GUI中的事件监听机制,当用户触发某个操作(如点击按钮),监听器会捕获并响应这个事件,实现了组件间的解耦和响应的实时性。 Struts2框架是基于MVC(Model-View-...

    java Beans开发使用手册(PDG)

    6. **设计模式**:Java Beans遵循一定的设计模式,如工厂模式用于创建组件实例,观察者模式用于处理事件。 在手册中,你可能会找到以下内容: 1. **环境准备**:如何设置开发环境,包括安装必要的开发工具,如...

    java设计模式电子书

    它们分为三类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如适配器、装饰器、代理、桥接、组合、外观、享元)和行为型模式(如观察者、策略、模板方法、访问者、命令、迭代器、备忘录、状态、职责链)...

    java设计模式的 3本书 1 ppt

    第二本"23种java设计模式.pdf"直接点明了主题,这23种模式是根据GOF(GoF,Gang of Four)的经典著作《设计模式:可复用面向对象软件的基础》中的分类,包括创建型模式(如工厂模式、抽象工厂模式、单例模式等)、...

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

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

    Java 设计模式实用知识库分享

    内容包括创建者模式、结构型模式、行为型模式、代理模式、策略模式、单例模式、责任链模式、模板方法模式、迭代器模式、适配器模式、观察者模式、装饰者模式、工厂方法模式、原型模式、抽象工厂模式、命令模式等。...

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

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

    设计模式-Java语言中的应用(pdf)

    行为型模式如策略(Strategy)、观察者(Observer)、访问者(Visitor)和模板方法(Template Method),关注对象之间的交互和职责分配。 在Java中,设计模式的应用广泛且深入。例如,单例模式在系统配置、线程池等...

    正确使用Java事件通知

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

    java开发常用设计模式

    Spring事件监听机制即采用了观察者模式。 6. **装饰者模式**:动态地给一个对象添加一些额外的职责,提供了一种替代继承的灵活方案。在Spring中,装饰者模式可以用于增强或修改Bean的功能而不修改其原始代码。 7. ...

    毕业设计-源码Java基于SSM网上试衣间设计

    而“java设计类”可能是指项目中运用了一些Java设计模式,如工厂模式、单例模式、观察者模式等,这些模式在软件设计中有着重要的地位,有助于提高代码的可维护性和可扩展性。 【压缩包子文件的文件名称列表】中的...

Global site tag (gtag.js) - Google Analytics