本文固定链接:http://www.verydemo.com/demo_c143_i32374.html
<!-- 广告开始 --> <!-- 广告完 --> |
观察者设计模式其实就是一种发布预订的设计模式,大家都知道JMS里面有发布预订的模式,也就是有一个一对多的关系,一个发布者,然后有N多个消费者,一旦发布者发出消息,那么所有预订的消费者都将收到消息。
一般的实现方法大家可能都很熟悉了;
1.传统观察者设计模式编写方法:
举例说明:
发布者类: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("大家好啊!!!");
}
}
【责编:admin】
--------------------next---------------------
<!-- 广告开始 -->linux牛牛网 <!-- 广告完 --> |
相关推荐
当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响其他对象的行为 l 订阅对象:当主题对象发生改变,订阅对象需要相应处理...
跟着 Guava、Spring 学习如何设计观察者模式.doc
作为一个资深Java工程师,我发现《Spring 设计模式总结》PDF非常精彩,它深入剖析了Spring框架中的关键设计模式。例如,简单工厂模式通过BeanFactory展现,实现了松耦合和动态对象创建。工厂方法模式则通过...
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...
附件是个观察者模式高级应用地demo,实现了事件分发机制,例如当创建一个新用户后,发送创建用户地事件,事件总线里面有对创建用户地事件监听地监听器就会得到相应地执行,比较适合那种当一个对象改变状态,依赖它的...
1.简单工厂 2.工厂方法 3.单例模式 4.适配器模式 5.装饰器模式 6.代理模式 7.观察者模式 8.策略模式 9.模版方法模式 1.简单工厂 2.工厂方
该存储库是一个简单的spring boot应用程序,演示了一些设计模式: 辛格尔顿 控制者 厂 战略 代理 观察者 面向方面的编程 该演示应用程序从2个不同的银行的网站(可以添加更多的银行)中检索联系电话,每个银行都有...
3.设计模式Design Pattern:创建型模式(厂模式Factory、抽象工厂模式Abstract Factory、单例模式Singleton、建造者模式Builder、原型模式Prototype和对象池模式Object Pool Pattern)、结构型模式(适配器模式、...
这是我用SPRING进行界面总局,用观察者模式等技术进行相关实现,里面用到了些许设计模式,这个源码对有一定基础的JAVA爱好者还是有用的
行为类型模式,共十种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,注释模式,状态模式,访问者模式,中介者模式,解释器模式。 设计模式的六大原则 开闭原则(Open Close Principle)...
设计模式全套学习ppt 能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的,数据库的使用、数据库的表结构设计。 基于spring+springMvc+mybatis 开发的企业...
基于spring+springMvc+mybatis 开发的博客样例,适合具有一定编程基础,比如...能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面,循环依赖都是如何设计和实现的。
FirstWebSite_Spring 我的仓库_示例模式设计(观察者)
介绍SpringIOC/AOP及实现当场去世Spring MVC实现当场去世设计模式单例模式观察者模式工厂模式简单工厂工厂方法抽象工厂不懂Interface &
涵含各种重要的JAVA编程知识点,面试突击专用 内容包括:Spring、SprngBoot、SpringCloud、Redis、MySQL、MyBatis、JVM、多...设计模式:包括常见的设计模式,如单例模式,工厂模式,观察者模式等,以及它们的使用场景
拍卖拍卖网站使用Java Spring MVC完成。使用安全性,时间表,Java邮件程序,JPA,工厂,观察员,策略等设计模式。
能学到什么:①了解工厂模式、策略模式、观察者模式等在 Spring 框架中的实现方式;②深入理解 IOC、AOP、代理、切面、循环依赖等设计与实现原理。 阅读建议:本资源旨在通过开发简化版 Spring 框架来学习其原理和...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也...
能学到什么:工厂模式、策略模式、观察者模式等都是怎么在django中体现的; 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合...