用spring实现观察者设计模式

观察者设计模式其实就是一种发布预订的设计模式,大家都知道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("大家好啊");//广播消息
}
}

传统的观察者设计方法发布者和预定者的联系是硬编码在程序里面的。

时间: 2024-08-03 22:42:14

用spring实现观察者设计模式的相关文章

Java观察者设计模式详解_java

   观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实现事件处理系统.   观察者模式(Observer)完美的将观察者和被观察的对象分离开.举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察

spring-类似Spring aop的设计模式还有什么

问题描述 类似Spring aop的设计模式还有什么 用什么设计模式可以实现类似spring 中AOP的功能,大神们指点下 解决方案 可以用动态代理模式来实现 解决方案二: java 动态代理 解决方案三: CSDN移动问答

Java观察者设计模式(Observable和Observer)_java

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作. 如果画面A是显示数据库里面的数据,而画面B修改了数据库里面的数据,那么这时候画面A就要重

Spring中的设计模式学习

Spring提供了一种Template的设计哲学,包含了很多优秀的软件工程思想. 1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类. Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定. 2. 工厂方法(Factory Method)

Cocos中的观察者设计模式与通知机制

观察者Observer模式也叫发布/订阅Publish/Subscribe模式是 MVC 模型-视图-控制器模式的重要组成部分.天气一直是英国人喜欢讨论的话题而最近几年天气的变化也成为中国人非常关注的话题.我会根据天气预报决定是坐地铁还是开车上班我的女儿也会根据天气预报决定明天穿哪件衣服.于是我在移动公司为我的手机定制了天气预报短信通知服务它的工作模型如图所示. 每天气象局将天气预报信息投送给移动运营商移动运营商的短信中心负责把天气预报发送给定制过这项服务的手机.在软件系统中一个对象状态改变也会

详解Java编程的Observer观察者设计模式_java

 java语言里包含了许多对设计模式的直接支持,如command模式,agent模式,observer模式等.虽然java提供的对这些模式的支持很简单,不能满足比较复杂的应用.但在简单的场景下,使用这些类往往能够得到立杆见影的效果.所以,如果没有什么特殊需求,还是最好利用java的这些类.         Observer模式,又称监听模式,观察者模式,是经典设计模式之一(one of GOF).java语言中,对这种模式支持的类和接口主要有以下几个,全部来自java.beans包: java.

C#设计模式之Observer设计模式(观察者设计模式)

一.观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变.做到这一点的设计方案有很

观察者设计模式

观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己.   观察者模式的组成 抽象主题角色 - Subject:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象类和接口来实现. 抽象观察者角色 - Observer:为所有具体的观察者定义一个接口,在得到主题的通知时更

C#事件和观察者设计模式

  Observer设计模式简介现在假设热水器由三部分组成:热水器.警报器.显示器,它们来自于不同厂商并进行了组装.那么,应该是热水器仅仅负责烧水,它不能发出警报也不能显示水温:在水烧开时由警报器发出警报.显示器显示提示和水温.   Observer 设计模式中主要包括如下两类对象 Subject:监视对象,它往往包含着其他对象所感兴趣的内容.在本范例中,热水器就是一个监视对象,它包含的其他对象所感兴趣的内容,就是temprature字段.当这个字段的值快到 100 时,会不断把数据发给监视它的