`
步行者
  • 浏览: 170127 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java 中的 Observer

阅读更多

 

Java 中的 Observer

Java 提供了 Observer 模式的默认实现,下面我们就看一下 Java 对 观察者模式的支持。

Java 对 观察者模式的支持 主要体现在 Observable  类和 Observer 接口。


(1) Observable  类代表 被观察者 (java.util.Observable

        主要方法有:

        void setChanged() : 设置被观察者的状态已经被改变
       
void addObserver(Observer  observer) : 添加观察者
       
int countObservers() : 返回所有观察者的数目
       
void deleteObserver(Observer  observer) :删除指定观察者
       
void deleteObservers() : 删除所有观察者
       
boolean hasChanged() : 被观察者的状态是否被改变,如果是则返回true,否则返回false
       
void notifyObservers()  : 通知所有观察者(没有参数)

        void notifyObservers(Object arg) : 通知所有观察者(带参数,参数一般设定为被改变的属性)
       
void clearChanged() :清除被观察者状态的改变(即调用 hasChanged() 时会返回 false)

(2) Observer 接口代表 观察者 (java.util.Observer

        它只有一个抽象方法需要被具体的观察者类实现(很重要 ):

        void update(Observable observable, Object arg) :当 被观察者 调用 notifyObservers(*) 方法

时,会根据被观察者的 hasChanged() 方法 来判断 它的状态是否被改变, 如果被观察者的状态被改变了,则

会调用 观察者 的 update 方法,参数 observable 为 被观察者对象, arg 为调用 notifyObservers( Object arg ) 时传入的参数 arg ,如果调用的是 notifyObservers() 方法, arg 为 null( 注意 :应该把这个参数 arg 设定为 被观察者的 被改变的属性)。


下面是一个实例:

被观察者 是 一个商品,当它的价格被改变后,就会通知相应的关注此商品的 客户(观察者)。


1,Good 类:商品类,继承了 Observable 类。


class Good extends Observable{
	private String name;
	private float price;
	public Good(String name, float price) {
		this.name = name;
		this.price = price;
	}
	public String getName() {
		return name;
	}
	public float getPrice() {
		this.notifyObservers(price);
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
		/*
		 * 注意 :在通知 所有观察者之前
		 * 一定要调用 setChanged()方法来设置被观察者的状态已经被改变,
		 */
		this.setChanged();
		/*
		 * notifyObservers 方法在通知完所有吗 观察者 后,
		 * 会自动调用 clearChanged 方法来清除 被观察者 的状态改变。
		 */
		this.notifyObservers(price);
	}
}
 

 

2,Customer 类:客户类,实现了 Observer 接口。


public class Customer implements Observer{
	private String name;
	public Customer(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void update(Observable observable, Object arg) {
		if(observable instanceof Good && arg instanceof Float){
			System.out.println("客户<"+this.name+"> : "+((Good)observable).getName()+"的价格变了,"+arg+"元了 !");
		}
	}
}

 

3,Test 测试类:

 

public class Test {
	public static void main(String[] args){
		Good good = new Good("洗衣粉",3.5f);
		Customer tom = new Customer("Tom");
		Customer jerry = new Customer("Jerry");
		good.addObserver(tom);
		good.addObserver(jerry);
		
		good.setPrice(2.5f);
		good.setPrice(3.0f);
	}
}
 

 

运行 Test 类,输出如下:

 

客户<Jerry> : 洗衣粉的价格变了,2.5元了 !
客户<Tom> : 洗衣粉的价格变了,2.5元了 !
客户<Jerry> : 洗衣粉的价格变了,3.0元了 !
客户<Tom> : 洗衣粉的价格变了,3.0元了 !


分享到:
评论

相关推荐

    闫宏Java设计模式源码

    Java中Observer接口和Observable类就是这种模式的体现。 7. **装饰器模式**:动态地给一个对象添加一些额外的职责。Java的IO流类库就大量使用了装饰器模式,如BufferedInputStream和DataInputStream。 8. **适配器...

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

    该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码的...

    java与模式一书源代码

    9. **观察者模式**:Java中Observer接口和Observable类实现了观察者模式,用于实现对象间的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知。源代码可能包含订阅和发布事件的例子。 10. **...

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

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

    java设计模式

    Java中Observer接口就是为此设计的。 15. **责任链模式**:避免请求发送者和接收者之间的耦合,将多个处理者对象链接在一起,形成一条链,请求沿链传递,由适当的处理者处理。 每个模式都有其特定的适用场景,理解...

    23种设计模式的java实现

    Java中Observer和Observable类用于实现此模式。 14. **命令模式**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。 15. **访问者模式**...

    java面试题大全

    - **观察者模式**:了解Java中Observer和Observable类的应用。 - **装饰者模式**:理解如何在不改变原有类的情况下增加功能。 6. **网络编程** - **Socket通信**:理解TCP和UDP协议,能编写简单的客户端和服务端...

    ObserverPattern

    在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以添加、删除观察者,并在状态改变时通知它们。`Observer`接口则定义了观察者...

    Observer模式

    在Java中,Observer模式主要通过java.util.Observable和java.util.Observer接口来实现。Observable类代表被观察的对象,Observer接口定义了观察者的基本行为。当Observable对象的状态发生变化时,会调用Observer接口...

    设计模式应用场景介绍&基础示例

    Java中Observer和Observable接口就是观察者模式的实现。 23. **中介者模式**:用一个中介对象协调一组对象之间的交互,降低对象间的耦合性。 以上23种设计模式是软件开发中的基础工具,理解并熟练运用它们,可以...

    java设计模式之Observer参考.pdf

    在Java中,Observer模式通过`java.util.Observable`和`java.util.Observer`接口实现。 在给定的文件中,我们看到一个具体的Observer模式应用例子,涉及到`Product`类和两个观察者`NameObserver`和`PriceObserver`。...

    Observer设计模式实例

    Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。...在Java、C#、Python等面向对象语言中,都有内置的Observer支持,使得实现这一模式更加便捷。

    java设计模式之Observer[整理].pdf

    在这个场景中,我们将讨论如何在Java中应用Observer模式,特别是在电子商务系统中的应用。 Observer模式的核心思想是定义一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化...

    观察者模式,Observer

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

    observer_JavaDesignPattern_

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,属于Java设计模式的重要组成部分。这个模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动...

    Android observer 使用demo

    在Android开发中,Observer模式是一种常见的设计模式,用于实现对象之间的通信和状态更新。Observer模式的核心思想是"一对多"的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。...

    java中界面控件的使用

    5. **事件处理**:Java Swing中的事件模型基于Observer模式。我们可以为控件添加各种事件监听器,如ActionListener(按钮点击)、MouseListener(鼠标操作)等。例如,当用户点击"保存"按钮时,我们需要触发保存数据...

    Java设计模式之观察者模式(Observer模式)介绍

    在Java中,这个模式是通过`java.util.Observable`类和`java.util.Observer`接口来实现的。 首先,我们要明白观察者模式的基本结构。在这个模式中,有两个主要的角色: 1. **主题(Subject)**:这是被观察的对象,...

    Observer例子

    在Java中,我们可以使用Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现Observer模式。主题类通常继承`Observable`,而观察者则实现`Observer`接口。当主题状态改变时,调用`Observable`的`...

    java 旋转中的风扇

    "java 旋转中的风扇" 一、java GUI 编程 Java GUI 编程是指使用 Java language 来开发图形用户界面的应用程序。Java GUI 程序使用 Java Foundation Classes(JFC)来提供图形用户界面组件,例如按钮、文本框、列表...

Global site tag (gtag.js) - Google Analytics