Java设计模式—观察者模式

观察者模式 Observer

  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。

观察者模式的组成

  抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。

  抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。

  具体主题角色:在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。

  具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。通常用一个子类实现。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。

以下是示例代码:

/**
 * 抽象主题角色
 * @author dream
 *
 */
public interface Watched {
	public void addWatcher(Watcher watcher);
	public void remWatcher(Watcher watcher);
	public void notifyWatcher(String str);
}
/**
 * 抽象观察者角色
 * @author dream
 *
 */
public interface Watcher {
	public void update(String str);
}
/**
 * 具体主题角色
 * @author dream
 *
 */
public class SpecifcWatched implements Watched {
	public List<Watcher> list = new ArrayList<Watcher>();
	@Override
	public void addWatcher(Watcher watcher) {
		// TODO Auto-generated method stub
		list.add(watcher);
	}

	@Override
	public void remWatcher(Watcher watcher) {
		// TODO Auto-generated method stub
		list.remove(watcher);
	}

	@Override
	public void notifyWatcher(String str) {
		// TODO Auto-generated method stub
		int len = list.size();
		for(int t=0; t<len; ++t){
			Watcher watcher = list.get(t);
			watcher.update("update");
		}
	}

}
/**
 * 具体观察者角色
 * @author dream
 *
 */
public class SpecifcWatcher implements Watcher{
	String name;
	public SpecifcWatcher(String name) {
		this.name = name;
	}
	@Override
	public void update(String str) {
		// TODO Auto-generated method stub
		System.out.println(name+":"+str);
	}

}

测试类:

/**
 * 测试观察者模式
 * @author dream
 *
 */
public class Test {
	public static void main(String[] args) {
		Watched watched = new SpecifcWatched();
		watched.addWatcher(new SpecifcWatcher("zhangsan"));   //添加观察者
		watched.addWatcher(new SpecifcWatcher("lisi"));
		watched.notifyWatcher("update");   //通知观察者变化
	}
}

测试结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-10 07:46:19

Java设计模式—观察者模式的相关文章

java设计模式--观察者模式和事件监听器模式

文章转载于:http://www.java2000.net/p9452 复习设计模式,看到observer观察者模式,说法是该模式和iterator迭代器模式类似已经被整合进jdk,但是jdk提供了两种接口: 一.java.util.Observer -- 观察者接口 对应: java.util.Observable --受查者根类 二.java.util.EventListener -- 事件监听/处理接口 对应: java.util.EventObject -- 事件(状态)对象根类 研究了

Java设计模式----观察者模式详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3899208.html 联系方式:[email protected] [正文] 一.观察者模式的定义: 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象.这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新.例如:GUI中的事件

Java设计模式の观察者模式(推拉模型)

目录: 一.观察者定义 二.观察者模式的结构(推模式实现) 三.推模型和拉模型(拉模式实现) 四.JAVA提供的对观察者模式的支持 五.使用JAVA对观察者模式的支持(自带推模式实现实例) 一.观察者定义 在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)

java设计模式-观察者模式

定义: 使用head First 设计模式中提到的说法 观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象.这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新. 简介: 观察者模式(Observer)完美的将观察者和被观察的对象分离开.举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上. 面向对象设计的一个原则是: 系统中的每个类将重点放在某一个功能上,而不是其他方面.

java设计模式-观察者模式学习

最近学习了设计模式中的观察者模式,在这里记录下学习成果. 观察者模式,个人理解:就是一个一对多模型,一个主体做了事情,其余多个主体都可以观察到.只不过这个主体可以决定谁去观察他,以及做什么事情可以给别人观察. 引用大师的话就是 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时

JAVA 设计模式 观察者模式

用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式是一种行为型模式. 结构 图-观察者模式结构图 Subject : 主题类,保存所有订阅此主题的观察者,观察者的数量是任意的.定义添加观察者 (Attach) 和删除观察者 (Detach) 的接口. abstract class Subject {     protected String

Java设计模式——观察者模式

转自:http://www.cnblogs.com/V1haoge/p/6513651.html 观察者接口:Observer public interface Observer { void update(String message, String name); } 定义三个观察者:Bianyi1.Bianyi2.Bianyi3 /** * 便衣警察张昊天 */ public class Bianyi1 implements Observer { // 定义姓名 private String

Java设计模式之观察者模式

综述 观察者模式(Observer Pattern)也叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.这个模式的一个最重要的作用就是解耦.也就是将被观察者和观察者进行解耦,使得他们之间的依赖性更小,甚至做到毫无依赖.在观察者模式中它定义了一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新.下面就来看一下观察者模式的具体实现. 观察者模式实现 在这里我们假定一个场景,在一个图书管理系统中,现在有这么一个需求

理解java设计模式之观察者模式

在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适合解决多种对象跟踪一个对象数据变化的程序结构问题. 观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer) 下面以java JDK中已有的观察者设计模式代码,展示使用: 1.主题(Subject):Observable类派生出来的子类,只需要定义各被监控的数据及getter