- 浏览: 34532 次
- 性别:
- 来自: 上海
最新评论
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();方法。
代码示例:
Test类运行输出的结果 :
继承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开始收费!
发表评论
-
模板方法模式
2013-06-27 10:28 421引用http://eneasy.iteye.com/blog/ ... -
状态模式
2013-06-26 16:38 541引用http://blog.csdn.net/hguisu/a ... -
策略模式
2013-06-24 18:28 571定义 策略模式(Strategy)属于对象行为型设计模式,主要 ... -
代理模式-动态代理
2013-06-20 16:37 490转自:http://www.cnblogs.com/jqyp/ ... -
观察者模式
2013-06-18 13:31 368GoF说道:Observer模式的意图是“定义对象间的一种一对 ... -
备忘录模式
2013-06-14 15:45 377转载:http://blog.csdn.net/m136663 ... -
java 中介者模式
2013-06-07 16:19 589定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需 ... -
迭代器模式
2013-06-07 11:18 646定义:提供一种方法访 ... -
命令模式
2013-06-05 16:56 757定义 将一个请求封装为 ... -
责任链模式
2013-06-03 16:46 563转自:《深入浅出设计 ... -
代理模式
2013-05-27 11:07 426一、简介 代理模式有两 ... -
享元模式
2013-05-23 16:43 523一、引子 让我们先来复习下 java 中String 类型的特 ... -
门面模式
2013-05-21 15:28 419转自http://www.cnblogs.com/java-m ... -
装饰模式
2013-05-21 11:03 341动态地给一个对象添加一些额外的职责。就增加功能来说,Decor ... -
组合模式
2013-05-20 16:21 695一、引子 在大学的数据 ... -
桥接模式
2013-05-10 11:05 598认识桥接模式 (1)什么是桥接 在桥接模式里面 ... -
适配器模式
2013-05-08 14:04 6211. 概述 将一个类的接口转换成客户希望的另外一个接口 ... -
原型模式
2013-04-22 14:53 636转自:http://blog.csdn.net/zhengzh ... -
单态模式
2013-04-22 14:24 594保证一个类仅有一个实例,*提供一个访问它的全局访*点。 适 ... -
建造者模式
2013-04-18 10:27 631转自:http://www.2cto.com/kf/20120 ...
相关推荐
#### JDK对观察者模式的支持 Java SDK通过`java.util.Observable`类和`java.util.Observer`接口提供了内置的支持。这些类和接口可以帮助开发者轻松地实现观察者模式。 1. **Observable类**: - 提供了创建可被...
在Java语言中,JDK提供了对观察者模式的支持。java.util.Observer接口和java.util.Observable类是这一支持的体现。Observable类是Subject的基类,任何需要被观察的类都可以继承这个类。它提供了添加/删除Observer的...
**JDK对观察者模式的支持** Java标准库提供了`java.util.Observable`和`java.util.Observer`两个类来支持观察者模式。`Observable`类代表观察目标,`Observer`接口代表观察者。用户可以通过继承`Observable`类来创建...
4. **新的NIO.2 API**:增强了文件I/O操作的能力,支持文件观察者模式,简化了文件系统的访问。 5. **动态语言支持**:增加了对动态语言的支持,使得Java平台可以更好地支持如Groovy、Scala等动态语言。 6. **安全性...
首先,我们要理解JDK API中的观察者模式实现。`java.util.Observable`类代表可被观察的对象,它可以有多个观察者。而`java.util.Observer`接口则定义了观察者的接口,每个观察者都需要实现这个接口以定义其更新行为...
观察者模式在Java中占有重要地位,尤其体现在JDK对它的内置支持上。`java.util.Observable` 类和 `java.util.Observer` 接口提供了观察者模式的基础实现。任何继承自 `Observable` 的类都可以成为主题,而实现 `...
【Java 实验:策略模式、观察者模式和组合模式】 实验目标主要集中在理解和应用三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可...
15. **Observer(观察者模式)**:`java.util.Observer`和`Observable`,以及Swing中的监听器,当对象状态改变时通知其他对象。 16. **Mediator(中介者模式)**:如`Swing`的`ButtonGroup`,协调多个组件之间的...
13. 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。`java.util.Observable`和`java.util.Observer`接口就是观察者模式的实现...
这种模式在Java8中得到了很好的支持,尤其是在引入lambda表达式之后,使得观察者模式的实现更加简洁和高效。 在Java8中实现观察者模式,我们可以利用Java的接口和事件处理机制。Java的`java.util.Observable`类和`...
12. **观察者模式**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java的`Observer`和`Observable`接口实现了观察者模式。 13. **责任链模式**:...
这种方法在设计模式如观察者模式中非常有用。通过源码,我们可以研究接口默认方法的实现机制以及它们在多继承中的处理策略。 对于Java 8的Optional类,它是用来解决null安全问题的一个工具类,源码解析可以帮助我们...
3. **NIO.2 (New I/O 2)**: JDK 1.6引入了NIO.2,提供异步I/O操作,增加了文件系统相关的API,如文件路径、文件属性、文件观察者等。 4. **动态代理增强**: 支持接口中的默认方法,允许代理类实现接口的默认方法,...
这对于设计模式如观察者模式等提供了更大的灵活性。 此外,新版本还引入了方法引用来代替传统的匿名内部类,简化了代码。方法引用可以是静态方法引用、实例方法引用或构造器方法引用,使得代码更加紧凑且易于理解。...
JDK 动态代理技术是 Java 语言自身对动态代理的支持,类似于 JDK 中在 java.util 包中提供 Observable 类和 Observer 接口提供对观察者模式的语言级支持。动态代理的优点是可以动态地为软件增加功能。 ...
这在设计模式中非常有用,比如在实现观察者模式时。 7. **新的集合工厂方法**:`List`、`Set`和`Map`接口增加了新的工厂方法,如`of()`、`ofNullable()`和`copyOf()`,方便创建不可变集合。 8. **类型注解**:JDK ...
- **文件系统观察者**:提供了观察和响应文件系统事件的能力。 这些版本的JDK体现了Java语言从基本功能到高级特性的不断演进,为开发者提供了更多的工具和能力,以适应不同场景的需求。无论是对初学者还是经验丰富...
3. **观察者模式**(Observer Pattern):定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,可以使用java.util.Observable和java.util.Observer...
- **学习设计模式**:源码中充满了经典的设计模式,如工厂模式、单例模式、观察者模式等,这些模式在实际开发中广泛应用。 - **问题排查**:遇到Java运行异常时,查看源码能更快定位问题所在,理解其底层原因。 -...