`

Java Observer 观察者

 
阅读更多

转自:http://www.cnblogs.com/jaward/p/3277619.html

Java Observer 观察者

1、API

被观察者
java.util.Observable;
public class Observable extends Object
    • void addObserver(Observer o);      如果该观察者集合里面没有这个观察者,添加进去。
    • protected void clearChanged();      把改变的状态清掉,即表示最近没有发生改变,使hasChanged()返回false
    • int countObserver();                     返回该Observable对象的观察者个数
    • void deleteObserver(Observer o);   删除一个观察者
    • boolean hasChanged();                 查看该Observable是否发生了改变
    • void notifyObservers();                 先调用hasChanged(),若返回true通知该对象所有观察者,然后用clearChanged()清掉状态
    • void notifyObservers(Object o);     同上,上面观察者update()接收的是null,这里可以返回想要通知的数据。
    • protected void setChanged();        设置变化,使到调用hasChanged()会返回true
 
观察者
java.util.Observer
public interface Observer
    • void update(Observable o, Object arg); 只要发生变化,notifyObservers()就会通知观察者。

 

2、用法

被观察类需要继承Observable类,在数据改变的地方(如set***();)里加上setChanged(),在需要监听的地方使用notifyObservers(Object o)。

观察者需实现Observer接口,对notifyObservers() 的提醒做出反应。

为Observable添加观察者。

复制代码
 1 //Test.java
 2 import java.util.Observable;
 3 import java.util.Observer;
 4 
 5 class Product extends Observable {
 6     private String name;
 7     private float price;
 8 
 9     public String getName() {
10         return this.name;
11     }
12 
13     public void setName(String name) {
14         this.name = name;
15         setChanged();
16         notifyObservers(name);
17     }
18 
19     public float getPrice() {
20         return this.price;
21     }
22 
23     public void setPrice(float price) {
24         this.price = price;
25         setChanged();
26         notifyObservers(new Float(price));
27     }
28 }
29 
30 class NameObserver implements Observer {
31     private String name = null;
32 
33     public void update(Observable obj, Object arg) {
34         if (arg instanceof String) {
35             this.name = (String)arg;
36             System.out.println("NameObserver: name change to "+this.name);
37         }
38     }
39 }
40 
41 class PriceObserver implements Observer {
42     private float price = 0;
43 
44     public void update(Observable obj, Object arg) {
45         if (arg instanceof Float) {
46             price = ((Float)arg).floatValue();
47             System.out.println("PriceObserver: price changte to "+price);
48         }
49     }
50 }
51 
52 
53 public class Test {
54     public static void main(String args[]) {
55         Product product = new Product();
56 
57         NameObserver nameobs = new NameObserver();
58         PriceObserver priceobs = new PriceObserver();
59     
60 
61         //add observer
62         product.addObserver(nameobs);
63         product.addObserver(priceobs);
64 
65 
66         product.setName("apple");
67         product.setPrice(9.22f);
68     }
69 }
分享到:
评论

相关推荐

    Java内置观察者模式

    Java中,观察者需要实现`java.util.Observer`接口。 3. **注册(Register)**:观察者向主题注册,表示对主题状态变化感兴趣。 4. **通知(Notify)**:主题状态改变时,会调用`notifyObservers()`方法,将变化...

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    java观察者模式观察者模式

    在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 ### `...

    Observer观察者模式

    Observer观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这个模式的核心概念是发布-订阅,即发布者(被观察对象)向订阅者(观察者)广播事件或...

    设计模式之略见一斑(Observer观察者模式)

    在Java中,我们可以使用`java.util.Observable`和`java.util.Observer`接口来实现观察者模式。但在这个例子中,我们可能看到的是自定义实现的观察者模式,因为文件列表中包含的`Test.java`, `Customer1.java`, `...

    设计模式之观察者模式(Observer Pattern)

    在Java、C#等面向对象编程语言中,观察者模式被广泛应用于用户界面、事件处理、游戏编程等领域。 在观察者模式中,通常有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它持有一个观察...

    java 设计模式 观察者模式 简单实例 包括测试test类

    在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...

    观察者模式代码(JAVA)

    在Java中,`java.util.Observable` 和 `java.util.Observer` 类是内置的支持观察者模式的类。`Observable` 类代表被观察的对象,而`Observer`接口则表示观察者。下面我们将详细探讨这两个类以及如何使用它们来实现...

    java 了解观察者模式

    在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util.Observer`这两个接口。下面我们将详细探讨观察者模式的概念、工作原理以及如何在Java中实现它。 观察者模式的核心概念是“观察者”和“被...

    Java观察者模式代码全解析

    Java标准库提供了`java.util.Observable`和`java.util.Observer`接口,用于实现观察者模式。 首先,我们需要创建一个`Observable`类的子类,代表我们的主题。这个类需要维护一个观察者列表,并提供添加、删除观察者...

    详解Java编程的Observer观察者设计模式

    这个模式的核心概念是一个主题(Subject)对象和一个或多个观察者(Observer)对象之间的关系,主题可以被多个观察者监视,当主题的状态发生改变时,会自动通知所有观察者。 在Java中,`java.beans....

    java实现观察者模式

    在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....

    java观察者模式Demo

    在Java中,`java.util.Observable` 和 `java.util.Observer` 是内置支持观察者模式的类。 标题中的“java观察者模式Demo”指的是使用Java语言来演示观察者模式的应用。通常,这个Demo会包含一个可观察的对象...

    Java 观察者模式的浅析

    ### Java观察者模式详解 #### 一、观察者模式概述 观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖关系。当一个对象(主题)的状态发生变化时,所有依赖于它的对象(观察者)都会收到通知并自动...

    java 观察者模式 demo

    在Java中,观察者模式的实现主要依赖于Java的`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,它可以有多个观察者;`Observer`接口则代表观察者,它们需要实现`update`方法来...

    java内置的观察者模式demo

    在Java中,观察者模式得到了内置支持,主要体现在`java.util.Observable`类和`java.util.Observer`接口中。下面我们将详细讨论这个模式以及如何使用Java内置的支持来实现它。 首先,我们要理解观察者模式的基本概念...

    观察者模式java实现观察者设计模式

    2. 实现观察者类,这个类会实现`Observer`接口或直接使用Java的`EventListener`接口,根据具体的应用场景选择合适的实现。 3. 注册观察者:将观察者对象添加到可观察对象的观察者列表中,通常在可观察对象的构造函数...

    观察者模式,Observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

Global site tag (gtag.js) - Google Analytics