重用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类;当该接口可以接受时,

它们是一个有用的工具。

retrofit2和rxjava2一起使用时的rxjava.jar版本冲突问题解决

retrofit2和rxjava2一起使用时的rxjava.jar版本冲突问题解决最近在升级rxjava到2.X.X版本的时候,发现出现rxjava1.x.x和rxjava2.x.x版本冲突retro...
  • jam130
  • jam130
  • 2017-04-21 16:43:37
  • 2832

Retrofit API报错: "Type 'java.util.Observable' does not have type parameter”的解决方案

问题还原:我想用retrofit+rxjava做网络请求,偏偏刚写被观察这时报错:Type 'java.util.Observable' does not have type parameters死活...
  • crazyZhangxl
  • crazyZhangxl
  • 2018-04-12 10:37:08
  • 40

RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)

Rxjava+ReTrofit+okHttp背景:    学习Rxjava+Retrofit+okhttp已经一段时间了,发现确实很强大,但是使用起来稍微有点麻烦,在工作中重复的代码太多,所以决定对h...
  • u014610664
  • u014610664
  • 2016-07-18 11:47:15
  • 180554

使用Retrofit+RxJava实现带进度下载文件

Retrofit+RxJava已经是目前市场上最主流的网络框架,使用它进行平常的网络请求异常轻松,之前也用Retrofit做过上传文件和下载文件,但发现:使用Retrofit做下载默认是不支持进度回调...
  • jiashuai94
  • jiashuai94
  • 2017-12-11 18:15:54
  • 1630

Java笔记(三)类的重用

Java语言的重用机制,重用的形式可以是类的组合或继承。基于类和对象的重用比传统程序的重用更容易。 1.类的继承 (1)继承的概念(子类,超类) ...
  • LiuShuaiQ
  • LiuShuaiQ
  • 2016-06-10 14:05:42
  • 1729

【jdk源码解析一】java.util.Observer与java.util.Observable

观察者模式大家应该十分熟悉,贴一张别人的图如下: 上图十分清晰的展示了观察者模式是什么样的。在java的util包里,实际上有内置的对观察者模式的实现,java.uti.Observable...
  • wangqisen
  • wangqisen
  • 2014-01-04 16:11:30
  • 883

简单实现两个listView的联动效果(网络框架Retrofit+Rxjava)

看了网上更新的好多联动demo,感觉写的不是很简洁(表示不知道他们在说什么) 自己写了一个简单的Demo分享给大家- -! 效果图: 直接上车,少说废话! 所用到以下的这几个依赖,直接粘到Buil...
  • weixin_37263797
  • weixin_37263797
  • 2017-04-05 20:37:19
  • 492

实现类重用 继承和组合比较

实现类重用:继承和组合。     继承:优点:子类可以获得父类的属性和方法,如果访问权限允许子类可以直接访问父类的属性和方法----------------相当于子类直接复用父类的属性和方法。  ...
  • renyuanchunby
  • renyuanchunby
  • 2011-11-16 10:23:26
  • 1632

派生自 java.util.Observable 类

import java.util.Observable; public class Boy extends Observable{ private String name; public Boy...
  • u013471064
  • u013471064
  • 2014-03-08 08:41:49
  • 287

RxJava+MVP+轮播+retrofit+条目点击+recyclerView

//布局 //主布局 xml version="1.0" encoding="utf-8"?> RelativeLayout xmlns:android="http://schemas....
  • du_mz66
  • du_mz66
  • 2017-11-23 08:01:09
  • 350
收藏助手
不良信息举报
您举报文章:重用java.util.Observable类
举报原因:
原因补充:

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