传统观察者设计模式编写方法:
发布者类:Publisher.java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Publisher implements Subject {
private List subs= new ArrayList();
private String msg;
// this message is added so I can give
// this class a reason to call notifyListener.
public void setMessage(String message){
System.out.println("我是发布者,我说:" + message);
this.messageText = message;
this.notifyListeners();
}
public void addListener(Subscriber o) {
this.subs.add(o);
}
public void removeListener(Subscriber o) {
if (this.subs.contains(o)){
this.subs.remove(o);
}
}
// call the update method on
// each Subscriber
public void notifyListeners() {
for (Iterator iter = subs.iterator(); iter.hasNext();) {
Subscriber listener = (Subscriber ) iter.next();
listener.update(msg);
}
}
}
预定者类:Subsriber1.java
public class Subsriber1 implements Observer {
public void update(String messageText) {
System.out.println("我的名字是: " + this);
System.out.println("我接收到消息: " + messageText);
}
预定者类:Subsriber2.java
public class Subsriber2 implements Observer {
public void update(String messageText) {
System.out.println("我的名字是: " + this);
System.out.println("我接收到消息: " + messageText);
}
如果按传统的观察者模式编写方法,如果要把发布者和预订者联系在一起的话;还需要有专门的处理类来负责添加这种联系。
例如:
public class ExampleRun {
public static void main(String[] args) {
Publisher pub = new Publisher();
Subsriber1 sub1 = new Subsriber1();
Subsriber2 sub2 = new Subsriber2 ();
pub.addListener(sub1);
pub.addLstener(sub2);
pub.setMessage("大家好啊");//广播消息
}
}
2。采用spring进行优化
首先你肯定要熟悉spring的bean工厂配置原理。
bean工厂的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="sub1" class="Subsriber1"/>
<bean id="sub2" class="Subsriber2"/>
<bean id="pub" class="Publisher"/>
<bean id="bindPubAndSub"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject"><ref local="pub"/></property>
<property name="targetMethod"><value>addListener</value></property>
<property name="arguments">
<list>
<ref bean="sub1"/>
<ref bean="sub2"/>
</list>
</property>
</bean>
</beans>
这里的关键是采用org.springframework.beans.factory.config.MethodInvokingFactoryBean工厂类;来动态
把sub1和sub2注入到pub当中。实现观察者的xml可配置化。
处理类如下:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class ExampleRun {
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"/config/ObserverTest.xml");
Pub pub = (Publisher) ctx.getBean("pub");
pub.setMessage("大家好啊!!!");
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gzjoek/archive/2006/04/14/663696.aspx
分享到:
相关推荐
跟着 Guava、Spring 学习如何设计观察者模式.doc
附件是个观察者模式高级应用地demo,实现了事件分发机制,例如当创建一个新用户后,发送创建用户地事件,事件总线里面有对创建用户地事件监听地监听器就会得到相应地执行,比较适合那种当一个对象改变状态,依赖它的...
在 Spring 中,观察者模式广泛应用于事件驱动编程中,例如,在 Spring MVC 中,使用观察者模式来处理请求和响应。 4.MVC Pattern:模型视图控制器模式,分离应用程序的关注点,实现高内聚、低耦合的设计。 在 ...
Observer (观察者模式) 又叫做发布/订阅(Publish/Subscribe)模式。 当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响...
代理模式和观察者模式在Spring AOP和事件驱动模型中得到了广泛应用,提供了强大的切面和事件处理能力。策略模式和模板方法模式则分别提供了资源访问的灵活性和统一处理逻辑的框架。最后,责任链模式在Spring的AOP...
这是自己做的一个项目,里面利用了hibernate和struts2,另外也使用了观察者和工厂模式,可以运行。代码并不复杂,但整合在一起对一些网站开发很多帮助。
1.简单工厂 2.工厂方法 3.单例模式 4.适配器模式 5.装饰器模式 6.代理模式 7.观察者模式 8.策略模式 9.模版方法模式 1.简单工厂 2.工厂方
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...
* 行为型:访问者、模板方法、策略模式、观察者模式、责任链等 在工作中,我们可能会使用到单例、工厂、代理、适配器、原型、建造者、策略等设计模式。 单例模式 单例模式是保证对象在JVM中唯一的设计模式。Java...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的,数据库的使用、数据库的表结构设计。 基于spring+springMvc+mybatis 开发的企业...
这种机制基于观察者模式,由事件(ApplicationEvent)、事件监听器(ApplicationListener)和事件广播器(ApplicationEventMulticaster)三个主要组成部分构成。 事件是发生的动作或事情,其核心是ApplicationEvent...
观察者模式(Observer)定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。spring中Observer模式常用的地方是listener的实现,如ApplicationListener。 ...
行为类型模式,共十种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式。 设计模式的六大原则 开闭原则(Open Close Principle)...
基于spring+springMvc+mybatis 开发的博客样例,适合具有一定编程基础,比如...能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的。
这是我用SPRING进行界面总局,用观察者模式等技术进行相关实现,里面用到了些许设计模式,这个源码对有一定基础的JAVA爱好者还是有用的
创建型模式(厂模式Factory、抽象工厂模式Abstract Factory、单例模式Singleton、建造者模式Builder、原型模式Prototype和对象池模式Object Pool...模式、组合模式、装饰器模式)、行为型模式(命令模式、观察者模式)...
FirstWebSite_Spring 我的仓库_示例模式设计(观察者)
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也...
观察者 面向方面的编程 该演示应用程序从2个不同的银行的网站(可以添加更多的银行)中检索联系电话,每个银行都有特定的实现,并提供了一个漂亮的界面来隐藏详细信息。 入门 这些说明将为您提供在本地计算机上运行...
设计模式全套学习ppt 能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、