- 浏览: 189381 次
- 性别:
- 来自: QD
文章分类
- 全部博客 (127)
- Struts2 (8)
- Web (27)
- 计算机基础 (2)
- 面试 (2)
- JQuery (4)
- MySQL (1)
- SQL (1)
- AJAX (3)
- Java (17)
- Javascript (36)
- 情感 (0)
- Oracle (7)
- Spring (5)
- FreeMarker (2)
- JSON (1)
- 表达式 (1)
- 线程 (4)
- WebService (10)
- MyEclipse (2)
- LDAP (1)
- Tomcat (1)
- NIO (1)
- Linux (1)
- ExtJS (4)
- Android (1)
- Dojo (2)
- Maven (9)
- Ant (7)
- 分布式 (1)
- Intellij IDEA (1)
最新评论
-
northc:
米饭军 写道如果文件已存在怎样避免应该会覆盖的
用Ant scp往远程linux传文件 -
米饭军:
如果文件已存在怎样避免
用Ant scp往远程linux传文件 -
luis025:
不支持列隐藏 硬伤
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1) -
rgbhje:
楼主大神,我把你的代码简单改了一小下,在4.2可以跑了
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1) -
rgbhje:
楼主大神,我把你的代码简单改了一小下,在4.2可以跑了
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1)
Java:应用Observer接口实践Observer模式(转)
- 博客分类:
- Java
转自:http://zhangjunhd.blog.51cto.com/113473/68949
在Java中通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。
1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)
|
addObserver()方法把观察者对象添加到观察者对象列表中。
当被观察事件发生时,执行:
setChanged();
notifyObservers();
|
setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()。
[4]对于观察者类,实现Observer接口的唯一方法update
void update(Observable o, Object arg)
|
形参Object arg,对应一个由notifyObservers(Object arg);传递来的参数,当执行的是notifyObservers();时,arg为null。
2.实例一
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。
NumObserable.java
package com.zj.observer;
import java.util.Observable;
public class NumObservable extends Observable {
private int data = 0;
public int getData() {
return data;
}
public void setData(int i) {
data = i;
setChanged();
notifyObservers();
}
}
|
NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行uodate()方法。
NumObserver.java
package com.zj.observer;
import java.util.Observable;
import java.util.Observer;
public class NumObserver implements Observer{
public void update(Observable o, Object arg) {
NumObservable myObserable=(NumObservable) o;
System.out.println("Data has changed to "+myObserable.getData());
}
}
|
测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。
SingleTest.java
package com.zj.observer;
public class SingleTest {
public static void main(String[] args) {
NumObservable number = new NumObservable();
number.addObserver(new NumObserver());
number.setData(1);
number.setData(2);
number.setData(3);
}
}
|
结果:
Data has changed to 1
Data has changed to 2
Data has changed to 3
3.实例二
这个实例中,还是对data进行观察,拥有两个观察者,分别观察奇数和偶数的变化,通过notifyObservers(arg)中的参数arg来识别通知信息。
被观察者NumsObservable.java
package com.zj.observers;
import java.util.Observable;
public class NumsObservable extends Observable {
public final static Integer ODD = 1;
public final static Integer EVEN = 2;
private int data = 0;
public int getData() {
return data;
}
public void setData(int i) {
data = i;
Integer flag = EVEN;
if ((data & 0x0001) == 1)
flag = ODD;
setChanged();
notifyObservers(flag);
}
}
|
奇数观察者OddObserver.java
package com.zj.observers;
import java.util.Observable;
import java.util.Observer;
public class OddObserver implements Observer {
public void update(Observable o, Object arg) {
if (arg == NumsObservable.ODD) {
NumsObservable myObserable = (NumsObservable) o;
System.out.println("OddObserver:Data has changed to " + myObserable.getData());
}
}
}
|
偶数观察者EvenObserver.java
package com.zj.observers;
import java.util.Observable;
import java.util.Observer;
public class EvenObserver implements Observer {
public void update(Observable o, Object arg) {
if (arg == NumsObservable.EVEN) {
NumsObservable myObserable = (NumsObservable) o;
System.out.println("EvenObserver:Data has changed to " + myObserable.getData());
}
}
}
|
测试类MultiTest.java
package com.zj.observers;
public class MultiTest {
public static void main(String[] args) {
NumsObservable number = new NumsObservable();
number.addObserver(new OddObserver());
number.addObserver(new EvenObserver());
number.setData(1);
number.setData(2);
number.setData(3);
}
}
|
结果:
OddObserver:Data has changed to 1
EvenObserver:Data has changed to 2
OddObserver:Data has changed to 3
发表评论
-
Java桌面程序打包成exe可执行文件(转)
2012-12-27 00:56 1178前言: 我们都知道Java可以将二进制程序打包成可执行 ... -
使用Java继承与泛型特性创建高效与安全的DAO对象
2012-06-27 17:15 0现在无论做什么应用,基本上都会有涉及对象持久化这方面的操 ... -
Java 批量插入数据(Oracle)
2012-03-28 16:21 2952//批量添加20000条数据用时8秒。 try { ... -
httpclient ,HtmlParser
2011-12-26 17:40 0有时间研究下吧... -
Java读取properties文件 【转】
2011-12-26 09:36 935不用可能会忘记.. 在这里转下别人的记录 方便以后 ... -
request 获取路径
2011-12-26 17:38 1101request.getRequestURI() /j ... -
ServletContext对象应用
2011-12-07 14:53 1299ServletContext对象是由谁创建的? 由Serv ... -
配置listener监听器(HttpSessionListener和HttpSessionBindingListener)细说
2011-12-07 14:52 1257from:http://blog.csdn.net/opnmz ... -
LDAP的特定错误集合
2011-11-28 11:29 2910LDAP的特定错误Error: com.macromedia. ... -
Filter多线程小细节
2011-11-26 14:50 1192在使用fileter的时候 如果在中间的位置需要fil ... -
JDBC调用Oracle的存储过程
2011-11-10 19:10 847本文主要是总结 如何实现 JDBC调用Oracle的存储过 ... -
ThreadLocal<T>总结补充
2011-11-06 17:47 1774原文地址: http://www.iteye.com/ ... -
关于 ThreadLocal
2011-11-06 17:26 1168ThreadLoca ... -
(转)Java编程中影响性能的一些特点
2011-11-04 11:42 622文中将提供一些在Java编程中影响性能的一些特点,为了能够 ... -
JSON与JAVA数据的转换
2011-10-21 12:24 887JSON-lib这个Java类包用于把bean,ma ... -
(转)Java内部类的用法
2011-10-21 09:05 740一、 定义 放在一个类的内部的类我们就叫内部类。 二、 作用 ... -
Java动态代理
2011-10-19 12:00 744代理模式 代理模式的 ... -
利用java的反射机制来访问类中的私有成员变量,私有构造方法,私有方法
2011-09-24 11:03 23821. 准备一个演示类 package my ...
相关推荐
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
股票的价格随着时间会在一定范围内波动,对于每个股票,股票分析软件提供多种指标分析,如分时图,K线图等,以辅助投资者进行... 提示:股价变动用随机数模拟:java.util.Random,用一个线程模拟股票行情数据的产生。
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)
Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用
Observer设计模式是一种经典的设计模式,在GOF 23种设计模式种 比较常用于实际。主要是有类指针传递并引用方法和消息传递响应的方法来实现。
JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标...
observer观察者模式
Observer与Command模式在VTK类库设计中的应用研究 通过阅读本文档可以熟悉vtk中的重要编程模式
java设计模式之Observer参考.pdf
音乐播放器 概述:使用Observer模式的Vanilla JS项目 设计源: : 声音来源: : 演示: :
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、...
NULL 博文链接:https://gary0416.iteye.com/blog/909427
第24章 OBSERVER模式—回归为模式 第25章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第26章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第27章 案例研究:气象站 第六部分 ETS案例研究 第28章 VISITOR...
java设计模式之Observer[整理].pdf
观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
第二十四章 OBSERVER模式——回归为模式 第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第二十七章 案例研究:气象站 第Ⅵ部分 ETS案例...
设计模式C++学习之观察者模式(Observer)
主要介绍了Java设计模式之观察者模式(Observer模式)介绍,Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解,需要的朋友可以...