观察者模式大家应该都很熟悉了,但是基于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");
}
}
分享到:
相关推荐
实验中提到的“建立一个基于Bean事件的Internet气象观测站”,可能需要以下步骤: 1. 创建一个气象观测站类(WeatherStation),作为事件源。这个类将包含表示天气状况的属性,如温度、湿度等,并且当这些属性发生...
用户交互界面设计主要是使用JAVA技术中的迭代器模式、观察者模式等来设计用户交互界面。后端逻辑设计主要是使用struts2拦截器设计模式和spring中的工厂模式来设计后端逻辑。 知识点四:设计模式在学生交互系统设计...
在Java应用程序中,观察者模式广泛应用于事件监听、GUI组件更新、实时系统、消息传递和分布式事件驱动系统等领域。 例如,在Java Swing框架中,所有的GUI组件都是事件监听器,它们监听并响应用户的动作或系统事件;...
以下是对基于Java的Message-Driven Bean EJB实例源代码的详细解读: 1. **Message-Driven Bean(MDB)基础**: - MDB是EJB的一种类型,专门用于处理JMS消息。它们是无状态的,因此不需要维护会话状态。 - MDB通过...
Java事务设计模式是系统开发中不可或缺的一部分,尤其是在大型分布式系统中,确保数据的一致性和完整性至关重要。本设计模式主要关注如何在Java环境中有效地管理和协调事务,以满足ACID(原子性、一致性、隔离性、...
【标题】:“基于Java开发的后台管理系统”是一个以Java编程语言为核心,专为初学者和学生设计的后台管理系统。这个系统充分利用了Java的SSM框架(Spring、SpringMVC、MyBatis)来构建,旨在帮助新手理解并掌握常规...
- 观察者模式:常用于事件驱动编程,例如GUI组件中的监听器。当特定事件发生时,观察者会被通知并执行相应的操作,如按钮点击或键盘输入。 2. Struts2中的设计模式: - 拦截器设计模式:Struts2使用责任链模式,...
此外,本书可能还会涵盖一些特定于Java EE环境的模式,如 Session Bean 和 Message Driven Bean 在Java EE中的应用,以及如何利用设计模式来优化EJB(Enterprise JavaBeans)的性能和可维护性。 总的来说,深入理解...
同时,观察者模式在事件驱动编程中十分常见,如GUI中的事件监听机制,当用户触发某个操作(如点击按钮),监听器会捕获并响应这个事件,实现了组件间的解耦和响应的实时性。 Struts2框架是基于MVC(Model-View-...
6. **设计模式**:Java Beans遵循一定的设计模式,如工厂模式用于创建组件实例,观察者模式用于处理事件。 在手册中,你可能会找到以下内容: 1. **环境准备**:如何设置开发环境,包括安装必要的开发工具,如...
它们分为三类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如适配器、装饰器、代理、桥接、组合、外观、享元)和行为型模式(如观察者、策略、模板方法、访问者、命令、迭代器、备忘录、状态、职责链)...
第二本"23种java设计模式.pdf"直接点明了主题,这23种模式是根据GOF(GoF,Gang of Four)的经典著作《设计模式:可复用面向对象软件的基础》中的分类,包括创建型模式(如工厂模式、抽象工厂模式、单例模式等)、...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的,数据库的使用、数据库的表结构设计。 基于spring+springMvc+mybatis 开发的企业...
内容包括创建者模式、结构型模式、行为型模式、代理模式、策略模式、单例模式、责任链模式、模板方法模式、迭代器模式、适配器模式、观察者模式、装饰者模式、工厂方法模式、原型模式、抽象工厂模式、命令模式等。...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的、:I0C、AOP、Bean生命周期、上下文、作用域、资源处理等。 基于java语言,使用...
行为型模式如策略(Strategy)、观察者(Observer)、访问者(Visitor)和模板方法(Template Method),关注对象之间的交互和职责分配。 在Java中,设计模式的应用广泛且深入。例如,单例模式在系统配置、线程池等...
通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易掉进一些陷阱。本文介绍了我自己在各种情形下,不小心制造的一些常见错误。 Java 事件通知 让...
Spring事件监听机制即采用了观察者模式。 6. **装饰者模式**:动态地给一个对象添加一些额外的职责,提供了一种替代继承的灵活方案。在Spring中,装饰者模式可以用于增强或修改Bean的功能而不修改其原始代码。 7. ...
而“java设计类”可能是指项目中运用了一些Java设计模式,如工厂模式、单例模式、观察者模式等,这些模式在软件设计中有着重要的地位,有助于提高代码的可维护性和可扩展性。 【压缩包子文件的文件名称列表】中的...