`
lastsoul
  • 浏览: 34789 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

观察者模式-JDK支持

 
阅读更多
JDK对观察者模式的支持主要是通过Observable类和Observer接口。

继承Observable类表示“主题”角色,实现Observer接口表示观察者。

Observer的简单功能介绍

update(Observable o, Object arg) Observable唯一的方法,在被通知时被

Observable调用.o表示主题对象,arg表示通知信息。由此看出这是一个“推-拉结合”使

用的方式。arg不传值就是拉模式,传值就是推模式,当然也可以推一部分,拉一部分。

Observable的简单功能介绍:

notifyObservers() 如果hasChanged()=ture,通知所有的观察着(则调用Observer.update()方法)

notifyObservers(Object arg) 如果hasChanged()=ture,通知所有的观察着(则调

用Observer.update()方法),并把参数arg传过去

说明:notifyObservers()内部其实是notifyObservers(null)

notifyObservers(Object arg)内部其实是 update(this,arg)和Observer中的

update方法对应。

注意点:调用notifyObservers方法之前一定要先调用setChanged();方法。

代码示例:
package com.pasu.observer;

import java.util.Observable;
/**
 * 新闻派发器,当有新的新闻时派发给所有的订阅读者(观察者)
 * @author pasu
 * @vesion 1.0, 2009-3-25
 *
 */
public class NewsDispatcher extends Observable
{
	/**
	 * 添加新闻的时候,把新闻内容发给所有的定义者
	 * @param news
	 */
	public void addNews(String news)
	{
		this.setChanged();
		this.notifyObservers(news);
	}
}


package com.pasu.observer;

import java.util.Observable;
import java.util.Observer;
/**
 * 读者(观察者)
 * @author pasu
 * @vesion 1.0, 2009-3-25
 *
 */
public class Reader implements Observer
{
	private String name;
	
	public Reader(String name)
	{
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg)
	{
		String news = (String)arg;
		System.out.println(name + " : " + news);
	}

	
}


package com.pasu.observer;
/**
 * 测试类
 * @author pasu
 * @vesion 1.0, 2009-3-25
 *
 */
public class Test
{
	public static void main(String[] args)
	{
		//体育新闻派发器
		NewsDispatcher sportNewsDispatcher = new NewsDispatcher();
		//it新闻派发器
		NewsDispatcher itNewsDispatcher = new NewsDispatcher();
		//观察者r1,r2,r3
		Reader r1 = new Reader("r1");
		Reader r2 = new Reader("r2");
		Reader r3 = new Reader("r3");
		//添加观察者
		sportNewsDispatcher.addObserver(r1);
		sportNewsDispatcher.addObserver(r2);
		itNewsDispatcher.addObserver(r3);
		//当有新的新闻的时候,通知观察者
		sportNewsDispatcher.addNews("中国队突破了历史获得了世界杯冠军!");
		itNewsDispatcher.addNews("ibm 收购 sun公司,java开始收费!");	
	}
}


Test类运行输出的结果 :
r2 : 中国队突破了历史,获得了世界杯冠军!
r1 : 中国队突破了历史,获得了世界杯冠军!
r3 : ibm 收购 sun公司,java开始收费!
分享到:
评论

相关推荐

    观察者模式详解(JDK中最重要的模式)

    #### JDK对观察者模式的支持 Java SDK通过`java.util.Observable`类和`java.util.Observer`接口提供了内置的支持。这些类和接口可以帮助开发者轻松地实现观察者模式。 1. **Observable类**: - 提供了创建可被...

    2 观察者模式-MOOC课程内容.pdf

    在Java语言中,JDK提供了对观察者模式的支持。java.util.Observer接口和java.util.Observable类是这一支持的体现。Observable类是Subject的基类,任何需要被观察的类都可以继承这个类。它提供了添加/删除Observer的...

    Java设计模式-第22章-观察者模式.ppt

    **JDK对观察者模式的支持** Java标准库提供了`java.util.Observable`和`java.util.Observer`两个类来支持观察者模式。`Observable`类代表观察目标,`Observer`接口代表观察者。用户可以通过继承`Observable`类来创建...

    jdk7 jdk-7u80-windows-x64 网盘下载

    4. **新的NIO.2 API**:增强了文件I/O操作的能力,支持文件观察者模式,简化了文件系统的访问。 5. **动态语言支持**:增加了对动态语言的支持,使得Java平台可以更好地支持如Groovy、Scala等动态语言。 6. **安全性...

    监听者模式练习(包括jdk api的实现和自定义实现)

    首先,我们要理解JDK API中的观察者模式实现。`java.util.Observable`类代表可被观察的对象,它可以有多个观察者。而`java.util.Observer`接口则定义了观察者的接口,每个观察者都需要实现这个接口以定义其更新行为...

    java 观察者模式 (Observe)

    观察者模式在Java中占有重要地位,尤其体现在JDK对它的内置支持上。`java.util.Observable` 类和 `java.util.Observer` 接口提供了观察者模式的基础实现。任何继承自 `Observable` 的类都可以成为主题,而实现 `...

    java实验:策略模式、观察者模式和组合模式.doc

    【Java 实验:策略模式、观察者模式和组合模式】 实验目标主要集中在理解和应用三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可...

    jdk中设计模式

    15. **Observer(观察者模式)**:`java.util.Observer`和`Observable`,以及Swing中的监听器,当对象状态改变时通知其他对象。 16. **Mediator(中介者模式)**:如`Swing`的`ButtonGroup`,协调多个组件之间的...

    JDK中有关23个经典设计模式的示例

    13. 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。`java.util.Observable`和`java.util.Observer`接口就是观察者模式的实现...

    全面解析Java8观察者模式

    这种模式在Java8中得到了很好的支持,尤其是在引入lambda表达式之后,使得观察者模式的实现更加简洁和高效。 在Java8中实现观察者模式,我们可以利用Java的接口和事件处理机制。Java的`java.util.Observable`类和`...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    12. **观察者模式**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java的`Observer`和`Observable`接口实现了观察者模式。 13. **责任链模式**:...

    jdk8源码包

    这种方法在设计模式如观察者模式中非常有用。通过源码,我们可以研究接口默认方法的实现机制以及它们在多继承中的处理策略。 对于Java 8的Optional类,它是用来解决null安全问题的一个工具类,源码解析可以帮助我们...

    JDK API 1.8 中文版 & JDK API 1.6 中文版

    3. **NIO.2 (New I/O 2)**: JDK 1.6引入了NIO.2,提供异步I/O操作,增加了文件系统相关的API,如文件路径、文件属性、文件观察者等。 4. **动态代理增强**: 支持接口中的默认方法,允许代理类实现接口的默认方法,...

    jdk1.8.0.rar

    这对于设计模式如观察者模式等提供了更大的灵活性。 此外,新版本还引入了方法引用来代替传统的匿名内部类,简化了代码。方法引用可以是静态方法引用、实例方法引用或构造器方法引用,使得代码更加紧凑且易于理解。...

    jdk动态代理技术详解

    JDK 动态代理技术是 Java 语言自身对动态代理的支持,类似于 JDK 中在 java.util 包中提供 Observable 类和 Observer 接口提供对观察者模式的语言级支持。动态代理的优点是可以动态地为软件增加功能。 ...

    jdk api 1.8_google.CHM中文文档

    这在设计模式中非常有用,比如在实现观察者模式时。 7. **新的集合工厂方法**:`List`、`Set`和`Map`接口增加了新的工厂方法,如`of()`、`ofNullable()`和`copyOf()`,方便创建不可变集合。 8. **类型注解**:JDK ...

    jdk 7 jdk 8 jdk 17 jdk 19 下载综合包

    - **文件系统观察者**:提供了观察和响应文件系统事件的能力。 这些版本的JDK体现了Java语言从基本功能到高级特性的不断演进,为开发者提供了更多的工具和能力,以适应不同场景的需求。无论是对初学者还是经验丰富...

    Java与模式-我修改过的源代码

    3. **观察者模式**(Observer Pattern):定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,可以使用java.util.Observable和java.util.Observer...

    jdk5_8源码

    - **学习设计模式**:源码中充满了经典的设计模式,如工厂模式、单例模式、观察者模式等,这些模式在实际开发中广泛应用。 - **问题排查**:遇到Java运行异常时,查看源码能更快定位问题所在,理解其底层原因。 -...

Global site tag (gtag.js) - Google Analytics