`

Observable和Observer

    博客分类:
  • java
阅读更多

Observable和Observer

前一段时间看了一下Observable和Observer的事件框架,觉的还不错,先记下来
 
Observer接口和Observable类可用于Model-View模式中:当Model中的数据发生变化时,Model主动通知View此变化。
其中Model用Observable类来实现,而View可以用实现了Observer接口的类来实现。举例如下
 

import java.util.Observable;
import java.util.Observer;

/**
* @author
* 观察员

*/
public class Human implements Observer {

private String name;


public Human() {
super();
}

public Human(String name) {
super();

this.name = name;
}


public void update(Observable o, Object arg) {

//获取被观察对象当前的状态
System.out.println(((InvalidMan)o).getState());

//向当前观察者通知消息
System.out.println(name + arg);
}

}


import java.util.Observable;

/**
* 被观察者
**/
public class InvalidMan extends Observable {

private int state;

//差
public final static int STATE_BAD = 0;

//死
public final static int STATE_DEAD = -1;

//良好
public final static int STATE_FINE = 1;


public InvalidMan() {
super();
}

public InvalidMan(int state) {
this.state = state;
}


public int getState() {
return state;
}

public void setState(int state) {
this.state = state;
}

public void changeState(int state){
if(this.state != state)
{
this.state = state;
this.setChanged();

if(STATE_BAD == state || STATE_DEAD == state)
{
this.notifyObservers("...危险...");
}
else if(STATE_FINE == state)
{
this.notifyObservers("...准备出院...");
}
}
else
{
this.notifyObservers("...老样子...");
}
}
}

 

测试DEMO

import java.util.Observer;

public class ObserverDemo
{
public ObserverDemo()
{
}

public static void main(String[] args)
{
//被观察者
InvalidMan o1 = new InvalidMan(InvalidMan.STATE_BAD);
//观察员
Observer oo1 = new Human("医生");
//观察员
Observer oo2 = new Human("护士");
//观察员
Observer oo3 = new Human("家人");

//向被观察对象注册观察员
//为病人注册 观察员:医生,护士,家人
o1.addObserver(oo1);
o1.addObserver(oo2);
o1.addObserver(oo3);

//更改被观察对象的状态
o1.changeState(InvalidMan.STATE_DEAD);
o1.changeState(InvalidMan.STATE_BAD);
o1.changeState(InvalidMan.STATE_FINE);
}

}

分享到:
评论
1 楼 concerning 2011-09-08  
不错不错,很好理解

相关推荐

    java实现观察者模式-Java内置的观察者模式(基于Observable和Observer)

    Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用

    observable-observer

    在Java中,`Observable`类和`Observer`接口是内置的实现,用于创建这种观察者模式。现在我们来详细探讨`Observable`和`Observer`的原理以及如何手动实现简单的`MyObservable`和`MyObserver`。 首先,`Observable`类...

    Java观察者设计模式(Observable和Observer)

    在Java中,观察者模式通过`java.util.Observable`类和`java.util.Observer`接口得以实现。 一、观察者模式介绍 观察者模式的核心在于建立一种对象间的依赖关系,这种关系使得当一个对象(被观察者)的状态发生改变...

    Observable与Observer

    在IT行业中,`Observable`与`Observer`是Java编程语言中的两个重要概念,它们是JavaFX和Java.util.Observable库的一部分,用于实现观察者模式。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个...

    Observer设计模式

    在Java中,除了标准库提供的Observable和Observer之外,还可以使用第三方库如Guava的EventBus或Spring框架的ApplicationEventPublisher接口来实现观察者模式,这些库提供了更高级的功能和更好的扩展性。 总之,...

    中文版超详细RxJava图文入门教程【PDF】

    RxJava 的核心概念是 Observable 和 Observer。Observable 是事件的生产者,而 Observer 是事件的消费者。Observable 负责生产事件,而 Observer 负责消费事件。在 RxJava 中,Observable 和 Observer 之间的关系是...

    android网络监控设计源码

    本示例中的核心在于利用Broadcast Receiver接收系统的网络变更事件,并通过Observable和Observer模式来通知那些关心网络状态的应用组件。 1. **创建Broadcast Receiver**:首先需要创建一个Broadcast Receiver,用...

    EventBus消息总线

    手工实现一个Observer也不是多复杂的一件事,只是因为这个设计模式实在太常用了,Java就把它放到了JDK里面:Observable和Observer,从JDK 1.0里,它们就一直在那里。从某种程度上说,它简化了Observer模式的开发,...

    给 Android 开发者的 RxJava 详解.zip_android

    - **Subscribe(订阅)**:连接Observable和Observer,当Observable有新的数据时,Observer会收到通知。 - **Operators(操作符)**:RxJava提供了一系列的操作符,如map、filter、merge等,用于对数据流进行转换...

    RxJS响应式编程

    2. **Observer**:订阅Observable的实体,用于接收和处理Observable发出的数据。 3. **subscribe()**:用于连接Observable和Observer,开始数据流的传递。 4. **Operators**:RxJS提供了丰富的转换和操作符,如map、...

    关于RxJava

    3. **subscribe(订阅)**:是连接 Observable 和 Observer 的桥梁。调用 Observable 的 subscribe 方法,传入 Observer 实例,即可建立订阅关系。 4. **Operator(操作符)**:是 RxJava 提供的一系列工具,用于...

    RxJava的使用详解

    在RxJava中,我们通过Observable(可观察者)和Observer(观察者)之间的交互来实现这一目标。Observable能够发出事件,而Observer则对这些事件作出响应。 RxJava的核心组件包括: 1. Observable:这是数据的生产者...

    RxJavaDemo22.rar

    在RxJava中,我们有Observable(可观察者)和Observer(观察者),它们之间通过subscribe()方法建立连接。序列则指的是RxJava中的数据流,它允许我们以声明式的方式处理数据,包括创建、组合和操作。 1. **创建...

    老罗Rxjava安卓视频教程

    - **Subscription(订阅)**:连接Observable和Observer的一种方式,可以用来取消订阅。 - **Scheduler(调度器)**:控制Observable和Observer执行的线程环境。 #### 二、RxJava基本使用方法 **2.1 创建...

    RxJavaStudy1

    RxJava的核心组件包括Observable和Observer。Observable是数据的生产者,可以发布一系列的数据事件;Observer则是数据的消费者,订阅Observable后,每当Observable有新的数据发布时,Observer就会接收到相应的通知。...

    RxJava-Android-Samples

    3. **Subscription(订阅)**:当 Observable 和 Observer 之间建立连接时,会产生一个 Subscription 对象。可以通过这个对象来管理订阅,如取消订阅。 4. **Operators(操作符)**:RxJava 提供了大量的操作符,...

    Rxjava2、Retrofit网络请求

    Observable发出数据,Observer消费数据,Subscription管理订阅关系,而Subject可以同时作为Observable和Observer。 3. **Retrofit与RxJava2的结合**: - 使用`@GET`、`@POST`等注解的方法返回类型改为`Observable...

    RxJava jar

    RxJava的核心概念是观察者模式的扩展,它引入了Observable(可观察者)和Observer(观察者)的概念,以及一系列操作符,如map、filter、concat、merge等,使得开发者能够以声明式的方式处理事件和数据流。...

    MVC小例子 使用Java类库observer和Observable

    在"Java类库observer和Observable"的上下文中,`Observer`和`Observable`是Java标准库中的接口和类,它们实现了观察者模式,这是MVC模式中的一个重要组成部分。观察者模式允许一个对象(观察者)注册到另一个对象...

Global site tag (gtag.js) - Google Analytics