文档章节

Java中的Observable和Observer(观察者模式)

colorlesswind
 colorlesswind
发布于 2016/09/12 23:27
字数 343
阅读 26
收藏 0

观察者模式介绍

        在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。

        如果画面A是显示数据库里面的数据,而画面B修改了数据库里面的数据,那么这时候画面A就要重新Load。这时候就可以用到观察者模式

以下例子演示Observable和Observer的使用

import java.util.Observable;
import java.util.Observer;

public class MainClass {

	public static void main(String[] args) {
		BeingWatch beingWatch = new BeingWatch();
		//Observable中使用vector来管理加入的Observer对象,
		//而且update从最后加入的Observer对象开始
		beingWatch.addObserver(new Watcher_1());
		beingWatch.addObserver(new Watcher_2());
		
		beingWatch.count(10);
		
		System.out.println("Final line in the main function...");
	}

}

class BeingWatch extends Observable {
	
	public void count(int num) {
		for (; num >= 0; num--) {
			setChanged();
			notifyObservers(num);
		}
	}
}

class Watcher_1 implements Observer {

	@Override
	public void update(Observable o, Object arg) {
		System.out.println("Watcher_1 count: " + arg);
	}
	
}

class Watcher_2 implements Observer {

	@Override
	public void update(Observable o, Object arg) {
		if (((Integer)arg).intValue() <= 5) {
			System.out.println("Watcher_2 count: " + arg);
		}
	}
	
}

输出结果————

Watcher_1 count: 10
Watcher_1 count: 9
Watcher_1 count: 8
Watcher_1 count: 7
Watcher_1 count: 6
Watcher_2 count: 5
Watcher_1 count: 5
Watcher_2 count: 4
Watcher_1 count: 4
Watcher_2 count: 3
Watcher_1 count: 3
Watcher_2 count: 2
Watcher_1 count: 2
Watcher_2 count: 1
Watcher_1 count: 1
Watcher_2 count: 0
Watcher_1 count: 0
Final line in the main function...

© 著作权归作者所有

共有 人打赏支持
colorlesswind
粉丝 1
博文 40
码字总数 9065
作品 0
广州
私信 提问
设计模式之「观察者模式」(Observer)

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象...

柳哥
2014/12/16
0
0
设计模式17——Observer设计模式

Observer观察者设计模式用于将对象的变化通知给感兴趣的用户。在Observer模式中的角色为主题(subject)与观察者(observer),观察者订阅它感兴趣的主题,一个主题可以被多个观 察者订阅,当...

小米米儿小
2014/01/26
0
0
Head first设计模式(2)

认识观察者模式 我们看看报纸和杂志的订阅是怎么回事: 1、报社的业务就是出版报纸 2、向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸...

祥林会跟你远走高飞
2014/12/26
0
0
深入JDK源码之Observer接口和Observable类实现观察者模式

观察者模式(有时又被称为发布/订阅模式)是软体设计模式的一种。在此种模式中,。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来事件处理系统。 观察者模式(Observer)完美的...

陶邦仁
2015/03/04
0
0
Guava学习笔记:EventBus

  EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的...

pior
2015/04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

网友第一次开发EOS区块链的经验

在处理项目时,用Java Connector for EOS区块链编写: 创建钱包 创建帐户 创建交易 创建签名交易 在帐户之间转移代币 我遇到了各种和运行本地EOS节点需要遵循的基本步骤。这个小指南纯粹是为...

geek12345
4分钟前
0
0
mybatis insert 动态生成插入的列及插入的值

代码如下 : 1.mapper.xml 文件 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"......

qimh
13分钟前
0
0
junit启动报错 Unable to find a @SpringBootConfiguration

环境 springboot项目 工程结构: test类编写: 异常 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test ......

zzx10
14分钟前
0
0
Html5 学习

1、mui 框架中的 plusReady 真机运行,浏览器不执行 http://ask.dcloud.net.cn/question/31708。 2、参考网络请求 仿网页 https://www.jianshu.com/u/84b5ef6309d6...

QGlaunch
15分钟前
0
0
net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.console.demo.web.model.XXX

前景: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.console.demo.web.model.XXX //jsonObject:所有参数//FreightTemplate对象里面包含一个 private List<FreightTemplateCi......

事儿爹
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部