观察者模式在不仅在java SWT中还是spring hibernate 应用都是非常广泛的,下面就我的理解做个记录。
首先要理解一些概念是必须的
事件源:事件源就是一个事件发生的组件,例如按钮,面板,在spring中可以表现为容器。
事件:我们都知道当我们点击一下按钮就是一个事件发生了。在具体表现为ActionEvent类。
比如时钟Timer类发生定时性动作时。
监听器:当某个事件发生的时候,监听器就会监听到,来进行相应的动作。当然一个容器有可能既是事件源。
下面是一个spring的观察者模式的事件的例子,
在spring中要想具有监听器功能就必须继承ApplicationListener
事件就要实现ApplicationEvent
下面是我实现的例子:
配置文件bean-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="emailer" class="com.starit.bean.EmailBean">
<property name="blackList">
<list>
<value>black@list.org</value>
<value>white@list.org</value>
<value>john@doe.org</value>
</list>
</property>
</bean>
<bean id="blackListListener" class="com.starit.bean.BlackListNotifier">
<property name="notificationAddress">
<value>spam@list.org</value>
</property>
</bean>
</beans>
监听器类
package com.starit.bean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public class BlackListNotifier implements ApplicationListener {
/** notification address */
private String notificationAddress;
public void setNotificationAddress(String notificationAddress) {
this.notificationAddress = notificationAddress;
}
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof BlackListEvent) {
System.out.println(((BlackListEvent) event).getEmail().getBlackList());
}
}
}
触发事件类
package com.starit.bean;
import org.springframework.context.ApplicationEvent;
public class BlackListEvent extends ApplicationEvent{
private static final long serialVersionUID = 1L;
private EmailBean email = null;
public BlackListEvent(Object o) {
super(o);
}
public BlackListEvent(Object source, EmailBean object) {
super(source);
this.setEmail(object);
}
public void setEmail(EmailBean email) {
this.email = email;
}
public EmailBean getEmail() {
return email;
}
事件源bean类
package com.starit.bean;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class EmailBean implements ApplicationContextAware {
private ApplicationContext ctx = null;
/** the blacklist */
private List blackList;
public void setBlackList(List blackList){
this.blackList = blackList;
}
public void setApplicationContext(ApplicationContext ctx) {
this.ctx = ctx;
}
public List getBlackList() {
return blackList;
}
public void sendEmail(String address, String text){
BlackListEvent evt = new BlackListEvent(address, (EmailBean)ctx.getBean("emailer"));
ctx.publishEvent(evt);
}
}
测试类如下:
package com.starit.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Test {
public static void main(String args[]) {
ApplicationContext context = new FileSystemXmlApplicationContext("beans-config.xml");
EmailBean emailBean = (EmailBean)context.getBean("emailer");
emailBean.sendEmail("black@list.org","1212");
}
}
以上的实现的步骤如下:
1.注册监听器。
2.事件源容器通过ctx.publishEvent(evt);触发事件 。
3.这时候我们的监听器就会能够监听到这个事件,就能够触发相应的动作。
总结:
程序中容器是事件源。也就是观察者模式中的主体对象。实现ApplicationListener接口的是监听器,也就是Observer模式中的观察者。实现ApplicationEvent是一个事件,
ps:http://www.iteye.com/topic/1292 事件模型
http://www.iteye.com/topic/522171 AWT事件模型
http://www.iteye.com/topic/519498 很好理解spring监听器的例子
http://www.iteye.com/topic/102068 观察者模式剖析
分享到:
相关推荐
**C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...
"ObserverPattern(订阅模式)3.zip"中的代码可能进一步阐述了观察者模式,这里的“订阅”一词可能意味着用户可以订阅特定的主题,只有当这些主题的状态改变时,用户才会收到通知。这与传统的观察者模式类似,但更加...
### (行为型模式) Observer 观察者模式 #### 概述 观察者模式是一种行为设计模式,它定义了一种一对多的关系,让多个观察对象同时监听某一个主题对象。当主题对象发生变化时,所有观察者对象都会收到通知并进行...
Observer观察者模式是一种设计模式,属于行为模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式广泛应用于事件驱动编程和实时系统...
本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...
观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他...在开发过程中,理解并熟练运用观察者模式,可以帮助我们构建更加高效、易于扩展的系统。
观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中广泛应用于事件驱动编程,例如用户界面组件的交互或者系统状态的...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的...通过理解和熟练运用观察者模式,可以极大地提升软件开发的效率和质量。
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象...在实际开发中,理解并合理运用观察者模式,能够有效地实现对象之间的交互和通信,提升代码的灵活性和可维护性。
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,...同时,现代编程语言和框架(如React的生命周期方法、Angular的事件机制等)也内置了观察者模式的概念,使得开发者可以更方便地使用和理解这一模式。
观察者模式(Observer)是一种设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在MFC(Microsoft Foundation Classes)框架中,我们可以...
观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...
在实际项目中,观察者模式可以用于各种场景,如监听用户输入、跟踪文件系统更改、处理后台任务进度更新等。通过深入理解和熟练运用Observer模式,开发者能够构建出更加灵活、响应式和易于维护的软件系统。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象...理解和熟练运用观察者模式,可以提升软件的可维护性和可扩展性。
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java和C++等面向对象编程语言中,这种模式广泛用于事件处理和实时系统,...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,...在实际的Java开发中,理解并熟练运用观察者模式对于编写高质量的代码至关重要。
在提供的压缩包文件中,`观察者模式模版和例子`可能包含了实现这些概念的代码示例,通过阅读和理解这些代码,你可以更好地掌握观察者模式的实现细节和应用方式。为了深入学习,建议先了解观察者模式的基本概念,然后...
《设计模式——观察者》 ...在实际开发中,理解并熟练运用观察者模式能够帮助我们构建更稳定、可维护的系统。无论是简单的用户界面交互,还是复杂的业务逻辑处理,观察者模式都能提供一种有效的解耦方案。