一、java自带的观察者模式
Observer对象是观察者,Observable对象是被观察者。
官网api文档:http://docs.oracle.com/javase/7/docs/api/
- 对于被观察者类:
当被观察者中的事件发生变化时,执行
- 对于观察者类,实现Observer接口的唯一方法update
void update(Observable o, Object arg)
形参Object arg,对应一个由notifyObservers(Object arg);传递来的参数,当执行的是notifyObservers();时,arg为null。
- 实例:

被观察者:ServerManager
package com.test.observer;
import java.util.Observable;
public class ServerManager extends Observable {
private int data = 0;
public int getData(){ return data; }
public void setData(int i){
if(this.data != i){ this.data = i;setChanged();}
notifyObservers(); //只有在setChange()被调用后,notifyObservers()才会去调用update(),否则什么都不干。 } }
}
}
观察者一:AObserver
import java.util.Observable;
import java.util.Observer; public class AObserver implements Observer { public AObserver(ServerManager sm) {
super();
// TODO Auto-generated constructor stub
sm.addObserver(this); //注册加入观察者
} @Override
public void update(Observable arg0, Object arg1) {
System.out.println("AObserver receive:Data has changed to "+((ServerManager) arg0).getData()); } }
观察者二:BObserver
import java.util.Observable;
import java.util.Observer; public class BObserver implements Observer { public BObserver(ServerManager sm) {
super();
sm.addObserver(this); //注册加入观察者
} @Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
System.out.println("BObserver receive:Data has changed to "+((ServerManager) o).getData());
} }
测试:
public class TestDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerManager sm = new ServerManager();
AObserver a = new AObserver(sm);
BObserver b = new BObserver(sm);
sm.setData(5);
sm.deleteObserver(a); //注销观察者,以后被观察者有数据变化就不再通知这个已注销的观察者
sm.setData(10);
}
}
运行结果:

一、java自带的观察者模式的更多相关文章
- 别再面向 for 循环编程了,JDK 自带的观察者模式就很香!
大家好,你还在面向 for 循环编程吗? 还有谁不会用观察者模式吗? 本篇栈长带来<观察者模式>理论及实战- 什么是观察者模式? 观察者模式(Observer Pattern)定义了对象间 ...
- 别再面向 for 循环编程了,Spring 自带的观察者模式就很香!
上一篇:JDK 自带的观察者模式就很香! 前段时间栈长给大家分享了什么是观察者模式,以及在 JDK 中如何实现观察者模式,现在都是 Spring 的天下了,今天就再分享下如何在 Spring/ Spr ...
- JAVA实现带图片的列表——JList
JList:显示对象列表并且允许用户选择一个或多个项的组件. JList的构造方法: 1.根据数组创建列表: JList(Object[] listData) 构造一个 JList,使其显示指定数组中 ...
- java自带工具-jps、jinfo、jstack、jstat、jmap
掌握java自带的这些监控工具,有助与我们很好的分析问题和jvm性能调优秀.收集了些网上整理很好的文章. Java监控工具.调优.调试辅助函数 Java自带的GUI性能监控工具Jconsole以及Ji ...
- Spark的Straggler深入学习(1):如何在本地图形监控远程Spark的GC情况——使用java自带的jvisualvm
一.本文的目的 Straggler是目前研究的热点,Spark中也存在Straggler的问题.GC问题是总所周知的导致Straggler的重要因素之一,为了了解GC导致的Straggle ...
- java自带BASE64工具进行图片和字符串转换
java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
- Java自带的keytool命令
使用Java自带的keytool命令,在命令行生成. 1.生成服务器端私钥kserver.keystore文件 keytool -genkey -alias serverkey -validity 1 ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- [转] 引用 Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
PS: Spring ThreadPoolTaskExecutor vs Java Executorservice cachedthreadpool 引用 [轰隆隆] 的 Java自带的线程池Thre ...
随机推荐
- [置顶] Oracle学习路线与方法
还没有整理好.... 1.学习路线 Oracle官方文档:2 Day DBA-->2 Day+Performance Tuning Guide--->Administrator's Gui ...
- LNMP安装与配置
Nginx与apache.lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 y ...
- 【数据压缩】LZ78算法原理及实现
在提出基于滑动窗口的LZ77算法后,两位大神Jacob Ziv与Abraham Lempel [1]于1978年又提出了LZ78算法:与LZ77算法不同的是LZ78算法使用树状词典维护历史字符串. [ ...
- Linux下安装zookeeper集群
首先,准备三台Linux虚拟机 三台机器 centos01 :192.168.1.168(lxs001) centos03 :192.168.1.178(lxs003) centos03 :1 ...
- C语言之循环结构 for(二)
一 for循环的嵌套使用 for循环的嵌套语法: for(int i =0;i<10;i++){ for(int j=0;j<5;j++){ } } 一般用来打印平面,或者控制平面,或者说 ...
- 一键强制修改任意Mysql数据库的密码,修改任意环境Mysql数据库。
本文采用我软件里面的内置改密功能,可以一键强制修改Mysql数据库的密码, 在修改过程中,会强制干掉Mysql主程序,修改完成后重新启动Mysql就可以了. 首先讲解如何一键强制修改PHPWAMP自身 ...
- Docker 搭建 etcd 集群及管理
环境 host1 10.1.99.13 host2 10.1.99.14 host3 10.1.99.15 host4 10.1.99.12(用于测试添加删除节点) 初始化集群 host1 $ doc ...
- liunx系统磁盘满的时候如何排查
第一步:查看磁盘总体情况 命令: df -lh 可以看出/dev/vda1, 不过这是个设备的名称不是对应的目录,其实/dev/vda1设备对应的目录名称是/home下面 或者可以全局搜索哪个目录下面 ...
- JS 常用功能收集
JS 常用效果收集 1. 回到顶部>> 爱词霸
- sequekize
关于sequelize的准备工作这里不再赘述. 一.引入sequelize模块 var Sequelize = require('sequelize'); 二.连接数据库 var sequelize ...