`
liu_android_1002
  • 浏览: 9256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

观察者模式-java实现

阅读更多

观察者模式 定义了对象之间的一对多的依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新

 

利用观察者模式,主题是具有状态的对象,并且可以控制这些状态,也就是说,有一个具有状态的主题。另一方面,观察者使用了这些状态,虽然这些状态并不属于他们。有许多的观察者,依赖主题来告诉他们状态何时改变,这就产生了一个关系, 一个主题对多个观察者的关系。

 

 

使用java内置的观察者模式 

    主题,被观察者对象

package cn.test.design_pattern.observer;

import java.util.Observable;

/**
 * 主题,被观察中 继承于java 内置的Observable
 * @author acer
 *
 */
public class WeatherData extends Observable{
	
	private float temperature;
	private float humidity;
	private float pressure;
	
	public float getTemperature() {
		return temperature;
	}

	public float getHumidity() {
		return humidity;
	}

	public float getPressure() {
		return pressure;
	}
	
	public  WeatherData() {

	}

	public void measuermentsChanged(){
		/**
		 * 在调用notifyObservers()之前,要先条用setChanged() 来指示状态已经改变
		 */
		this.setChanged();
		notifyObservers();
	}
	
	public void setMeasurements(float temperature,float humidity,float pressure){
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		measuermentsChanged();
	}

}

 

观察者对象

package cn.test.design_pattern.observer;

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

/**
 * 观察者对象,实现java 内置Observer 接口
 * @author acer
 *
 */
public class CurrentConditionsDisplay implements Observer, DisplayElement {
	private float temperature;
	private float humdity;
    Observable observable;
    
	public CurrentConditionsDisplay(Observable observable) {
		/**
		 * 构造一个 主题(被观察者对象) 并指定当前对象为观察者
		 */
		this.observable = observable;
		observable.addObserver(this);
	}


	@Override
	public void display() {
		System.out.println("Current conditions: " + temperature
				+ "F degrees and " + humdity + "%humdity");
	}

	@Override
	public void update(Observable o, Object arg) {
		/**
		 * 在 update() 方法中先确定被观察者是否是当前观察者说观察的对象,然后取出被观察者中的数据
		 */
		if( o instanceof WeatherData){
			WeatherData weatherData = (WeatherData) o;
			this.humdity = weatherData.getHumidity();
			this.temperature = weatherData.getTemperature();
		    display();
		}
	}

}

 

测试代码

package cn.test.design_pattern.observer;

public class WeatherStation {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
          WeatherData weatherData = new WeatherData();
          CurrentConditionsDisplay display = new CurrentConditionsDisplay(weatherData);
          weatherData.setMeasurements(80, 120.0f, 4f);
          weatherData.setMeasurements(81, 120.0f, 4f);
          weatherData.setMeasurements(82, 120.0f, 4f);
         
 
	}

}

 

总结:

1.观察者模式定义了对象之间一对多的关系。

2.主题(被观察者) 用一个共同的接口来更新观察者。

3.观察者和被观察者之间使用松耦合方式结合,被观察者不知道观察者的细节,只知道观察者实现了观察者接口。

分享到:
评论

相关推荐

    设计模式--观察者模式java例子

    在Java中,观察者模式可以通过Java的内置接口`java.util.Observer`和`java.util.Observable`来实现。`Observer`接口代表观察者,而`Observable`类代表被观察的对象,也称为主题(Subject)。下面将详细介绍这两个...

    设计模式之观察者模式Java实现

    在Java中,观察者模式通常通过Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 首先,...

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

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

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

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

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    深入理解观察者模式-Java设计模式及应用案例(第2版)-[共5页].pdf

    在Java中,观察者模式常常被用来实现事件处理机制。 在提供的代码片段中,我们看到一个简单的观察者模式实现。`Subject`类代表主题,`IObserver`接口代表观察者,`Observer`类是观察者的具体实现。`Test`类是一个...

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

    在Java中,我们可以利用Java提供的内置监听器机制来实现观察者模式,例如`ApplicationListener`和`ApplicationEvent`,这两个类主要用于Swing或JavaFX应用程序中的事件处理。 首先,我们来看`ApplicationListener`...

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...

    设计模式-Java语言中的应用

    结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如策略模式、模板方法模式、观察者模式、访问者模式、迭代器模式、责任链模式、命令模式、备忘录模式、...

    设计模式-观察者模式(讲解及其实现代码)

    在Java中,`java.util.Observable`和`java.util.Observer`类提供了观察者模式的内置支持。而在其他语言中,如C#、Python等,也可以轻松实现观察者模式,通过事件或委托机制。 总结来说,观察者模式是一种重要的设计...

    java观察者模式demo----未使用java工具类

    在Java中,标准的观察者模式实现是通过`java.util.Observable`类和`java.util.Observer`接口来完成的,但本示例特别指出未使用这两个内置工具类,而是完全自定义实现了观察者模式。 观察者模式的主要组件包括: 1. ...

    Java内置观察者模式

    本文将深入探讨Java内置的观察者模式,包括其原理、实现方式以及实际应用。 ### 观察者模式的核心概念 1. **主题(Subject)**:被观察的对象,也就是发出通知的一方。在Java中,通常通过实现`java.util....

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

    4. **Java实现**:在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了观察者模式的标准实现。`Observable`类代表主题,`Observer`接口代表观察者。通过`addObserver()`添加观察者,`...

    java实现观察者模式

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

    设计模式-观察者

    在Java中,`java.util.Observable` 和 `java.util.Observer` 类为实现观察者模式提供了基础支持。 1. **主题(Subject)**:主题是被观察的对象,它可以是抽象的或具体的。主题维护了一个观察者列表,并提供了添加...

    设计模式-java实现代码样例

    5. **观察者模式**(发布-订阅模式):定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java的`java.util.Observer`和`java.util.Observable`接口提供了...

    java实现观察者模式-自定义的观察者接口和主题类

    观察者模式都能帮助实现对象之间的松耦合、依赖关系的解耦,并提供一种动态的消息通知机制

    Java设计模式-第22章-观察者模式.ppt

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

    观察者模式代码(JAVA)

    观察者模式不仅限于`java.util`包中的实现,也可以自定义观察者和被观察者类,这样可以更灵活地处理不同类型的事件和状态变化。同时,注意避免过度使用观察者模式,因为它可能导致过多的回调和复杂的依赖关系,影响...

Global site tag (gtag.js) - Google Analytics