重用java.util.Observable类

转载 2004年07月14日 15:09:00

通常你可以完全开发一套自己的Listener/Event(监听器/事件)系统,但是在Java标准库中已经有了现存的通用解决方案,使用它可以节约大量的时间。

在Java库中,事件和监听器的使用是很普遍的,这些都只是观察者(Observer)模式的例子。Java Uitl包中提供了一个Observable/Observer对,虽然并不是非常强大,但在很多场合下仍然有用。

下面的三个类演示了使用Observer/Observable类的一种方式。

import java.util.*;
public class OEventManager extends Observable {
static public void main(String[ ] args) {
OEventManager mgr = new OEventManager( );
mgr.addObserver( new OListener( ) );
mgr.addObserver( new OListener( ) );
mgr.addObserver( new OListener( ) );
mgr.fireChange("Changed. ");
} public void fireChange(String msg) {
setChanged( );
notifyObservers( new OEvent(msg));
}
}
class OListener implements Observer {
public void update(Observable o, Object arg) {
System.err.println("Passed '"+arg+"' by "+o+" to "+this);
}
}
class OEvent extends EventObject {
public OEvent(String msg) {
super(msg);
}
}
 

一个需要注意的要点是OEvent类把事件消息存储在源中。通常情况下,这儿应该存储的是激发事件的对象,

并且事件消息也应该存储在单独的域中,但是这儿这样做是出于简洁的目的。

另一个需要注意的是Observable的setChanged方法的使用,如果Observable没有发生变化,

它并不通知观察者;相反,它仅简单地忽略对notifyObservers方法的调用。

下面是例子程序的输出:

Passed 'OEvent[source=Changed. ]' by OEventManager@c9a to OListener@3b63e6
Passed 'OEvent[source=Changed. ]' by OEventManager@c9a to OListener@25cf3e
Passed 'OEvent[source=Changed. ]' by OEventManager@c9a to OListener@48f0cd

因为Observer接口强制了update(Observable, Object)方法签名(signature),

所以Observer/Observable类并不能替代你自己定义的Event/Listener类;当该接口可以接受时,

它们是一个有用的工具。

Java常用类库——观察者设计模式(Observer接口、Observable类)

学习目标: 了解观察者设计模式的作用。 掌握Observer接口和Observable类的作用。 观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者...
  • u013087513
  • u013087513
  • 2016年07月06日 16:38
  • 732

浅谈Cell的重用机制

首先我们需要搞明白为什么要使用重用机制,它的原理是什么. 无论是UITableView还是UICollectionView,都有许多需要显示的cell (item), 但是屏幕的大小是有限的...
  • u010850094
  • u010850094
  • 2016年09月29日 13:14
  • 1123

Yarn的JVM重用功能——uber

在文章开头,我想先做几点说明: 1、本文的内容来自我对Yarn的相应功能的理解和实践。而我对该部分功能的理解主要来自对Hadoop的开发者之前相应言论的分析,并且我也将我的分析发给了Hadoop co...
  • samhacker
  • samhacker
  • 2013年11月12日 22:54
  • 7718

UITableView的禁用重用机制

UITableView的重用机制 iphone重用机制是苹果为了实现大量数据显示而采用的一种节省内存的机制,比如在UITableView和ScrollView 等地方。为什么要“可重用”...
  • u011118092
  • u011118092
  • 2016年07月07日 11:36
  • 629

iOS开发中,去除UITableViewCell重用机制的几种方法

UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击...
  • xiaojinIT
  • xiaojinIT
  • 2016年11月18日 18:00
  • 2373

关于“端口重用引发的惨案”的思考

读了“端口重用引发的惨案”()
  • taozhi20084525
  • taozhi20084525
  • 2014年04月09日 16:50
  • 1500

Hadoop的JVM重用

Hadoop的JVM重用 hadoopjvm参数配置   Hadoop中有个参数是mapred.job.reuse.jvm.num.tasks,默认是1,表示一个JVM上最多可以顺序执行的task...
  • javastart
  • javastart
  • 2017年08月05日 16:15
  • 419

重用执行计划

 重用执行计划 优化的过程主要消耗CPU资源。默认情况下,SQL Server将重用原来调用存储过程时缓存的执行计划,而且不检查这样做是否合适。 为演示计划重用,运行下面的代码,它将创建...
  • cxzhq2002
  • cxzhq2002
  • 2014年08月25日 17:58
  • 452

可重用性-一旦一个函数被写入

新的程序员经常问:“我们不能把代码里面的代码直接放在里面吗?”“在许多情况下(特别是简单的例子),它可以。然而,函数提供了一些好处,使他们非常有用的非平凡的程序。 组织程序越来越复杂,有所有的代码都...
  • shazhugw
  • shazhugw
  • 2016年08月22日 17:12
  • 505

UIScrollView的重用笔记

UIScrollView的重用笔记import “ViewController.h” /* UIScrollView 的重用原理借鉴TableView的重用池,创建一个专门盛放子View数组,下...
  • qq_28125515
  • qq_28125515
  • 2015年12月10日 19:32
  • 419
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重用java.util.Observable类
举报原因:
原因补充:

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