传统观察者设计模式编写方法:
发布者类: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
分享到:
相关推荐
下面将详细介绍这两个关键组件以及如何使用它们来实现观察者模式。 1. `Observer`接口: - `Observer`接口提供了`update`方法,当被观察的对象状态发生变化时,该方法会被调用。通常,观察者会在这个方法中执行...
例如,在用户界面(UI)开发中,模型(Model)的改变可能需要更新视图(View),这时就可以使用观察者模式来确保数据同步。在工具开发中,例如IDE(集成开发环境)的代码编辑器,当用户修改代码时,编译器或调试器...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...另外,许多现代框架,如Spring,也支持观察者模式,使得开发者能够轻松地实现事件监听和响应。
观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种...此外,Spring框架中的`ApplicationEventPublisher`和`ApplicationListener`接口也是实现观察者模式的一个常见选择,它们在企业级应用中广泛使用。
在Java中,Guava和Spring框架都提供了实现观察者模式的工具。 Guava的EventBus是观察者模式的一个实例,它简化了事件发布和订阅的过程。EventBus允许你定义事件的发布者(即被观察者)和事件的订阅者(即观察者)。...
而Spring框架中的`ApplicationEvent`和`ApplicationListener`也是观察者模式的应用,用于应用级别的事件监听。 标签中的"源码"暗示我们可以深入研究上述代码实现的细节,了解其内部工作原理。而"工具"可能指的是...
Java 标准库中提供了 `java.util.Observable` 和 `java.util.Observer` 类来支持这一模式,而现代框架如 Spring 中的 `ApplicationEventPublisher` 也利用了观察者模式。 总的来说,观察者模式是一种强大的设计工具...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动编程,使得系统...
9. **扩展**:除了Java内置的`Observer`和`Observable`,开发者还可以使用第三方库如Guava的`EventBus`,或者Spring框架的`ApplicationEvent`和`ApplicationListener`,这些都提供了更高级的观察者模式实现。...
下面是一个使用Java语言实现观察者模式的简单示例: 1. **定义 Observer 接口**: ```java public interface Observer { void update(String message); } ``` 2. **定义 Subject 接口**: ```java import ...
13. **观察者模式(Observer)**:Spring AOP并没有直接实现观察者模式,但在Spring事件模型中,`ApplicationEventPublisher`和`ApplicationListener`接口体现了观察者模式,允许对象注册监听并响应特定事件。...
此外,现代框架如Spring也提供了对观察者模式的支持,可以通过事件监听机制实现。 总的来说,观察者模式是一种强大的工具,可以用来实现事件驱动的设计,提高代码的灵活性和可扩展性。理解并熟练运用观察者模式对于...
- **观察者模式(Observer)**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个...
附件是个观察者模式高级应用地demo,实现了事件分发机制,例如当创建一个新用户后,发送创建用户地事件,事件总线里面有对创建用户地事件监听地监听器就会得到相应地执行,比较适合那种当一个对象改变状态,依赖它的...
- Spring框架中的事件驱动机制,通过ApplicationEvent和ApplicationListener实现观察者模式,使得组件之间可以解耦地传递事件。 - Android中的BroadcastReceiver,允许应用注册接收系统广播,当特定事件发生时,广播...
在 Spring 中,观察者模式广泛应用于事件驱动编程中,例如,在 Spring MVC 中,使用观察者模式来处理请求和响应。 4.MVC Pattern:模型视图控制器模式,分离应用程序的关注点,实现高内聚、低耦合的设计。 在 ...
5. **观察者模式**:ApplicationContext实现了观察者模式,允许监听器监听应用程序上下文中的变化。 #### 六、总结 通过对Spring框架设计理念与设计模式的分析,我们可以看到Spring框架的成功在于其对软件工程原则...
Observer (观察者模式) 又叫做发布/订阅(Publish/Subscribe)模式。 当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响...