原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6017508.html
新浪微博:intsmaze刘洋洋哥
public class Observable {
private boolean changed = false;
private Vector obs; //创建被观察者时就创建一个它持有的观察者列表,注意,这个列表是需要同步的。
public Observable() {
obs = new Vector();
} /**
* 添加观察者到观察者列表中去
*/
public synchronized void addObserver(Observer o) {
if (o == null)
throw new NullPointerException();
if (!obs.contains(o)) {
obs.addElement(o);
}
} /**
* 删除一个观察者
*/
public synchronized void deleteObserver(Observer o) {
obs.removeElement(o);
} /**
* 这个方法接受一个参数,这个参数一直传到观察者里,以供观察者使用
*/
public void notifyObservers(Object arg) {
Object[] arrLocal;
synchronized (this) {
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
}
} public interface Observer {
void update(Observable o, Object arg);
} public class JMSObserver implements Observer{
public void update(Observable o, Object arg) {
System.out.println("发送消息给jms服务器的观察者已经被执行");
}
}
public class Subject extends Observable{ /**
* 业务方法,一旦执行某个操作,则通知观察者,在队列模式中,其实就是当消息被添加到队列的时候,添加进队方法里面调用了通知方法。
*/
public void doBusiness(){
if (true) {
super.setChanged();
}
notifyObservers("现在还没有的参数");
} public static void main(String [] args) {
//创建一个被观察者
Subject subject = new Subject(); //创建观察者
Observer jmsObserver = new JMSObserver(); //把两个观察者加到被观察者列表中
subject.addObserver(jmsObserver); //执行业务操作
subject.doBusiness();
}
}
java观察者模式的更多相关文章
-
用Spring提高java观察者模式灵活性
在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入�新的逻辑,加入�新的listene ...
-
java: 观察者模式:Observable被观察者,Observer观察者
java: 观察者模式:Observable被观察者,Observer观察者 以房子价格为例,卖房者为被观察者: import java.util.Observable; //被观察者子类化 publ ...
-
Java——观察者模式实例
观察者模式(订阅/发布模式) 作者: 代码大湿 代码大湿 Java中观察者模式中主要是Observerable类(被观察者),和Observer接口(观察者).下面是个简单的demo //被观察者 p ...
-
java 观察者模式 与spring配置
一.Observer模式的意图: 在对象的内部状态发生变化时,自动通知外部对象进行响应. 二.Observer模式的构成: ·被观察者:内部状态有可能被改变,而且又需要通知外部的对象 ·观察者:需要对 ...
-
Java观察者模式(Observer)
一.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己.主要应用在java的AWT事件机制 ...
-
说说Java观察者模式
观察者模式是对象行为模式中的一种,在平时项目中经常被用来解耦对象之间的依赖. 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新.别名:De ...
-
java 观察者模式
/** 抽象的观察者 */ public interface Watcher { // status 为 被被观察着传递过来的状态 public void update(String status); ...
-
Java观察者模式(Observer模式)
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
-
java观察者模式的实现
在看博客里,有个订阅功能,当你订阅后,当博主发布新的博客,你都能收到消息.这是如何实现的?是不是后台有个线程在不停的轮询?如果是这样的话,显然太耗资源,如果当博客在发布时,找到所有的订阅者,然后循环的 ...
随机推荐
-
谈谈service层在mvc框架中的意义和职责
mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计, ...
-
.net程序员转行做手游开发经历(四)
今天是大年初二,在这里先给大家拜个年,祝大家在新的一年里能事事顺心. 年前的时候更新了一版,先发了内测,没有想到过年这几天,有的小伙伴们还在玩,还给我们提了很多建议和意见,让我们觉得非常温暖,给我们很 ...
-
十四、Java基础---------String、StringBuffer、StringBuilder基本应用
在前面的博客中曾提及Java的数据类型分为基本数据类型,和引用数据类型,而String便是最常见的应用数据类型,本文将着重介绍这一引用数据类型的用法. String 字符串 String类是对 ...
-
01.Editplus+Lua配置
学习一门语言有一款简单顺手的编辑工具很重要,我使用Editplus要多一点:就想能不能加上Lua支持,网上一搜还还不少.现把配置记录下来,也算做个笔记吧! Editplus版本是中文3.41(网上下吧 ...
-
Prometheus Node_exporter 之 System Detail
System Detail 1. Context Switches / Interrupts type: GraphUnit: shortLabel: CounterContext switches ...
-
20165302 敏捷开发与XP实践作业
20165302 敏捷开发与XP实践实验报告 一.提交点一 1.实验要求 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD ...
-
通过内存盘提高MSMQ的消息吞吐能力
转载:http://www.ikende.com/blog/00f2634be4704b79a3e22439edeb1343 由于MSMQ的消息交互都需要对磁盘进行读写操作,所以提高MSMQ的消息吞吐 ...
-
Linux新手入门:Unable to locate package错误解决办法
最近刚开始接触Linux,在虚拟机中装了个Ubuntu,当前的版本是Ubuntu 11.10,装好后自然少不了安装一些软件,在设置了软件的源后,就开始了 sudo apt-get install,结果 ...
-
SAP 直接修改程序的方法
一般项目上都会有这么个神奇的程序,能在测试机和生产机上直接修改程序... REPORT ztest_change. "变量定义 , line() TYPE c, "如果代码中某行大 ...
-
linux系统常见命令以及操作
2.安装xshell,安装完打开,配置回话,输入名称(随便).SSH.主机(打开linux,点击右上角电脑图标system etho进行联网,打开终端输入ifconfig回车,找到inet add地址 ...