`

Observable(观测) 示例

    博客分类:
  • Java
阅读更多

/*

Observable类用于创建可以观测到你的程序中其他部分的子类,当这种子类的对象发生变化时,观测类被通知。观测类必须实现定义了update()方法和Observer接口。当一个观测程序被通知到一个被观测对象的改变时,update()方法被调用。
一个被观测的对象必须符合两个简单规则:第一,如果它被改变了必须调用setChanged()方法。第二,当它准备通知观测程序它的改变时,必须调用notifyObserver()方法。

*/

//Demonstrate the Observable class and the Observer interface.
import java.util.*;
class Watcher implements Observer{
 public void update(Observable obj,Object arg){
  System.out.println("update() called,count is " + ((Integer)arg).intValue());
 }
}
//This is the class being observed.
class BeingWatched extends Observable{
 void counter(int period){
  for(;period>=0;period--){
   setChanged();
   notifyObservers(new Integer(period));
   try{
    Thread.sleep(100);
   }catch(InterruptedException e){
    System.out.println("Sleep interrupted!");
   }
  }
 }
}
class ObserverDemo{
 public static void main(String[] args)
 {
  BeingWatched observed = new BeingWatched();
  Watcher observing = new Watcher();
  //Add the observing to the list of observers for observed object.
  observed.addObserver(observing);
  observed.counter(10);
 }
}

/*

有多个对象可以用作观测程序,下面程序实现了两个观测类并且将每个类中的一个对象增加到BeingWatched观测程序列表中,第二个观测程序等待直到计数为0,随后振铃。

*/

//An object may be observed by two or more observers
import java.util.*;
//This is the first observing class.
class Watcher1 implements Observer{
 public void update(Observable obj,Object arg){
  System.out.println("update() called,count is " + ((Integer)arg).intValue());
 }
}
//This is the second obsrving class.
class Watcher2 implements Observer{
 public void update(Observable obj,Object arg){
  //Ring bell when done.
  if (((Integer)arg).intValue() == 0)
   System.out.println("Done" + '\7');
 }
}
//This is the class being observed.
class BeingWatched extends Observable{
 void counter(int period){
  for(;period>=0;period--){
   setChanged();
   notifyObservers(new Integer(period));
   try{
    Thread.sleep(100);
   }catch(InterruptedException e){
    System.out.println("Sleep interrupted!");
   }
  }
 }
}
class TwoObserversDemo{
 public static void main(String[] args)
 {
  BeingWatched observed = new BeingWatched();
  Watcher1 observing1 = new Watcher1();
  Watcher2 observing2 = new Watcher2();
  //add both observers
  observed.addObserver(observing1);
  observed.addObserver(observing2);
  observed.counter(10);
 }
}

分享到:
评论

相关推荐

    前端开源库-z-observable

    "Z-Observable"就是一个这样的开源库,专注于提供可观测性功能,它在JavaScript中实现了观察者模式,帮助开发者处理数据变化和响应式编程。 在JavaScript中,可观测(Observable)的概念源自于函数响应式编程(FRP...

    前端开源库-vigour-observable

    在`brisky-observable-master`这个压缩包中,我们可以找到`vigour-observable`的源代码,包括主要的类、方法和示例。通过研究这些文件,开发者可以深入了解其工作原理,以便更好地利用它来优化自己的前端项目。 在...

    rx-observablefield,[实验]可观测(rxjava2)<->可观测字段(android数据绑定).zip

    在这个示例中,`observableField.asObservable()`将`ObservableField`转换为`Observable`,然后通过RXJava2的操作符进行一系列处理,并在主线程上更新结果。 将`RxObservableField`整合到项目中,你需要首先添加...

    实验一 状态反馈与状态观测器.docx

    2. **MATLAB程序代码示例** ```matlab % 定义系统矩阵 A = [-1 -1; 1 0]; B = [1; 0]; C = [1 0]; % 控制器设计 p = [-1+i, -2, -1-i]; % 指定闭环极点 K = place(A, B, p); % 观测器设计 q = [-1, -2, -3]; % ...

    RxJava + RxAndroid实例详解

    在RxJava中,事件、数据或者任何变化都是通过"Observable"(可观测者)对象来表示的,而对这些变化感兴趣的代码则通过"Observer"(观察者)来订阅这些Observable,当Observable的数据发生变化时,Observer会接收到...

    Mobx使用详解1

    在示例中,`observable.box(0)`和`observable.box(100)`分别创建了两个可观察的值`value`和`number`。当这些观测值发生改变时,依赖于它们的代码将会自动执行。例如,`autorun`函数会在观测值变化时运行。在示例中,...

    pomdp-solve-v4.0.tar.gz_POMDP C/C++_pomdp_马尔科夫_马尔科夫决策

    **POMDP(Partially Observable Markov Decision Process)** 是一种用于处理不确定性和部分可观测性的决策模型。在许多现实世界的问题中,如机器人导航、自然语言理解和游戏策略等,系统状态不能完全被观测到,...

    RxJava基本流程

    1. **创建 Observable**: 在示例代码中,通过 `Observable.create()` 方法创建了一个 Observable。这个 Observable 会订阅网络请求并返回一个 Bitmap 对象。`Observable.OnSubscribe` 是一个接口,它的 `call()` ...

    observable-playground:部署到生产之前了解您的可观测对象

    图表API的示例 图表api通过require('api/v0.3')公开,例如对于RxJS: const { rxObserver } = require ( 'api/v0.3' ) ; const { timer } = require ( 'rxjs' ) ; const observer = rxObserver ( 'Title' ) timer ...

    rx-code-school:Rx 代码学校示例

    - **Observable(可观测序列)**:它是RxJava的核心概念,可以发布数据流。 - **Observer(观察者)**:订阅Observable,接收并处理发布的数据。 - **Subscription(订阅)**:连接Observable和Observer的关系,...

    关于RxJava

    在RxJava中,数据以序列的形式流动,这些序列被称为 Observable(可观测)。Observable 可以发布数据(即发射事件),而订阅者(Observer)则可以监听并处理这些数据。 **基本概念:** 1. **Observable(可观测)**...

    rxexamples:ReactiveX示例

    RxJava通过一系列被称为“Observable”(可观测)的对象,使得开发者可以方便地处理事件、数据序列和异步操作。这个名为"rxexamples"的项目,显然是为了展示如何使用ReactiveX进行实际编程,特别是结合了Kotlin语言...

    前端开源库-vigour-js

    总的来说,Viguer JS(即将更名为Viguer Observable)是一个强大的前端工具,它通过高效的观测机制和智能的内存管理,简化了数据驱动的应用开发。对于希望构建响应式用户界面并关注性能优化的开发者来说,这是一个...

    rx-java-example:关于如何使用 RxJava 库的简单示例

    RxJava 的核心概念包括 Observables(可观测对象)、Observers(观察者)和 Operators(操作符)。Observables 能够发布数据流,而 Observers 则订阅这些数据流并处理它们。Operators 是一系列用于转换、过滤、组合...

    ApplicationDemo, RxJava 各种操作符(包括线程调度)的使用范例.zip

    RxJava 是一个在 Java VM 上使用可...这个示例项目可以帮助开发者深入理解如何在 Android 应用中有效地使用 RxJava,从而提高代码的可读性和可维护性。通过实践,你可以更好地掌握这一强大的工具,提升你的开发技能。

    sample-rxjava:RxJava 示例

    首先,我们要了解 RxJava 的核心组件:Observables(可观测序列)、Subscribers(订阅者)和 Operators(操作符)。Observables 负责生成数据流,Subscribers 接收并处理这些数据,而 Operators 则用于转换或过滤...

    Android的RxJava绑定.zip

    1. **Observable(可观测序列)**: RxJava的核心是Observable,它能够发出一系列数据项或事件。开发者可以订阅这些Observable来接收数据。 2. **Observer(观察者)**: 观察者订阅Observable,当Observable发出数据...

    rxjava1中文帮助文档

    RxJava是一个在Java VM上使用可观测序列来编写异步和基于事件的程序的库,它可以让你以声明式的方式编写异步代码,让代码结构更清晰,更易于维护。RxJava是响应式扩展(Reactive Extensions)的一部分,Rx是微软推出...

    Rxjava文档(中文版)

    在RxJava中,数据流由Observable(可观测序列)和Observer(观察者)之间的交互构成。 **基本概念** 1. **Observable(可观测序列)**:作为数据的生产者,可以发出一系列的事件或数据。在RxJava中,Observable...

    RxJava2.x的集成

    - **Observables(可观测序列)**: 观察者模式中的发布者,它可以发出一系列数据项或者一个终止信号(完成或错误)。 - **Observers(观察者)**: 接收并处理Observables发出的数据。 - **Operators(操作符)**: ...

Global site tag (gtag.js) - Google Analytics