观察者模式理解,以及JDK实现

原创 2012年03月24日 09:31:20

观察者模式(有时又被称为发布/订阅模式)。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。


在观察者模式中,主要涉及观察者(Observer) 和被观察的对象(Observerable)。

需要指出的重要一点:在每个Observerable对象内部,都维护者一个对外private的观察者对象的列表。只能通过addObserver方法,将Observer添加到这个列表中。Observaerable对象发生改变的时候,通过调用setChange方法,告诉Observer对象,Observerable对象发生了改变。然后调用Observerable对象继承来的notify的相关方法,唤醒Observer对象,执行Observer的update方法。


调用JDK中的java.util包中的类的实现如下。

package viekie.du.Model;

import java.util.Observable;

public class Student extends Observable {

	private int age;
	
	private String name;
	
	public Student(int age, String name) {
		this.age = age;
		this.name = name;
	}
	
	public void getOlder() {
		
		int currentAge = this.age;
		
		while ( age < 18 ) {
			age ++;
			
			if( currentAge != this.age ) {
				
				this.setChanged();
				this.notifyObservers(name + "is growing, he's age is " + this.age);
			}
		}
		
		
	}
}

package viekie.du.Model;

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

public class Teacher implements Observer{

	private String name;
	
	public Teacher(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable obser, Object obj) {

		System.out.println(obj.toString());
	}

}

package Main;

import viekie.du.Model.Student;
import viekie.du.Model.Teacher;

public class MainTest {

	public static void main(String[] args ) {
		
		Student liaoliang = new Student(6, "liaoliang");
		Student wangxiaoyong = new Student(6, "wangxiaoyong");
		Student luoqing = new Student(6, "luoqing");
		
		Teacher viekieSir = new Teacher("viekie");
		
		liaoliang.addObserver(viekieSir);
		wangxiaoyong.addObserver(viekieSir);
		luoqing.addObserver(viekieSir);
		
	
		liaoliang.getOlder();
		wangxiaoyong.getOlder();
		luoqing.getOlder();
		
		
	}
}

输出的内容如下:

liaoliangis growing, he's age is 7
liaoliangis growing, he's age is 8
liaoliangis growing, he's age is 9
liaoliangis growing, he's age is 10
liaoliangis growing, he's age is 11
liaoliangis growing, he's age is 12
liaoliangis growing, he's age is 13
liaoliangis growing, he's age is 14
liaoliangis growing, he's age is 15
liaoliangis growing, he's age is 16
liaoliangis growing, he's age is 17
liaoliangis growing, he's age is 18
wangxiaoyongis growing, he's age is 7
wangxiaoyongis growing, he's age is 8
wangxiaoyongis growing, he's age is 9
wangxiaoyongis growing, he's age is 10
wangxiaoyongis growing, he's age is 11
wangxiaoyongis growing, he's age is 12
wangxiaoyongis growing, he's age is 13
wangxiaoyongis growing, he's age is 14
wangxiaoyongis growing, he's age is 15
wangxiaoyongis growing, he's age is 16
wangxiaoyongis growing, he's age is 17
wangxiaoyongis growing, he's age is 18
luoqingis growing, he's age is 7
luoqingis growing, he's age is 8
luoqingis growing, he's age is 9
luoqingis growing, he's age is 10
luoqingis growing, he's age is 11
luoqingis growing, he's age is 12
luoqingis growing, he's age is 13
luoqingis growing, he's age is 14
luoqingis growing, he's age is 15
luoqingis growing, he's age is 16
luoqingis growing, he's age is 17
luoqingis growing, he's age is 18


Java设计模式(观察者模式JDK自带)

JDK自带的观察者模式和我们上一节说的基本相似,也有通用的观察协议规则 Observer,这个接口中只有一个方法,就是update方法 public interface Observer { ...
  • xyjwsj
  • xyjwsj
  • 2017年02月15日 16:47
  • 660

JAVA设计模式 之 观察者模式(JDK内置实现)

简介:使用JAVA内置的观察者模式
  • chengzhangmsdn
  • chengzhangmsdn
  • 2014年05月17日 19:27
  • 1924

设计模式——观察者模式 JDK内置的Observable类和Obsever接口

Java的AWT和Swing的事件监听都是基于观察者模式。并且观察者模式
  • u013147914
  • u013147914
  • 2014年05月07日 16:16
  • 846

JDK自带的观察者模式

介绍一下jdk自带的观察者模式 subject -> java.util.Observable(类) void addObserver(Observer o) 如果观察者与集合中...
  • a19881029
  • a19881029
  • 2013年05月26日 19:00
  • 4762

观察者模式 详解

定义 一个或多个观察者对目标的状态感兴趣,它们通过将自己依附在目标对象上以便注册所感兴趣的内容。 目标状态发生改变并且观察者可能对这些改变感兴趣,就会发送一个通知消息,调用每个观察者的更新方法。 当观...
  • u010388497
  • u010388497
  • 2016年06月18日 17:31
  • 525

设计模式之观察者模式简单理解

本篇文章总结于马士兵的视频教程《观察者模式》。个人非常推荐马士兵的视频教程,对于初学Java的人来说,J2SE基础视频非常不错,对于内存分析讲的十分到位。对于有一定基础的人来说,设计模式系列,反射系列...
  • sundacheng1989
  • sundacheng1989
  • 2015年12月13日 19:16
  • 2010

Java设计模式之观察者模式

本文继续介绍23种设计模式系列。介绍的是观察者模式。
  • jason0539
  • jason0539
  • 2015年04月16日 07:32
  • 29864

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

文章转载于:http://www.java2000.net/p9452 复习设计模式,看到observer观察者模式,说法是该模式和iterator迭代器模式类似已经被整合进jdk,但是jdk提...
  • sbvfhp
  • sbvfhp
  • 2013年04月06日 13:40
  • 5429

深入理解观察者模式(二)

在深入理解观察者模式(一)中,我曾经提过在观察者模式中如果被观察目标和观察者之间是一对多的关系,那么我们在对被观察者目标进行设计时就必须尽量符合单一职责原则,也就是要做到让所有观察者响应相同的改变。如...
  • hyhdcl
  • hyhdcl
  • 2016年11月14日 00:45
  • 248

JDK中的设计模式之观察者模式

The observer pattern is a software design pattern in which an object, called the subject, maintains ...
  • kangkanglou
  • kangkanglou
  • 2017年12月06日 20:17
  • 61
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:观察者模式理解,以及JDK实现
举报原因:
原因补充:

(最多只允许输入30个字)