`

简单理解观察者模式(Observer)

阅读更多
简单理解观察者模式
/**
 * 主题(被观察者信息)
 */
public interface Subject {

	/**
	 * 注册观察此对象
	 */
	boolean registerObserver(Observer observer);
	/**
	 * 删除此对象
	 */
	boolean removeObserver(Observer observer);
	/**
	 * 通知变化
	 * 当主题状态改变时, 这个方法会被调用,以通知所有的观察者。
	 */
	int notifyObservers();
}


/**
 * 观察者接口
 */
public interface Observer {

	/**
	 * 更新数据
	 * 所有的观察者都必须实现update()方法,以实现观察者接口。在这里,我们按照Mary和Sue的想法把观测值传入观察者中
	 * @return
	 */
	boolean update(double temp,double humidity,double pressure);
}

/**
 * 不同的显示
 */
public interface DisplayElement {
	void display();
}

/**
 * 主题对象类
 */
public class WeatherData implements Subject {

	private List<Observer> observers = new ArrayList<Observer>();
	private double temperature;
	private double humidity;
	private double pressure;
	
	public WeatherData() {
	}

	@Override
	public boolean registerObserver(Observer observer) {
		return observers.add(observer);
	}

	@Override
	public boolean removeObserver(Observer observer) {
		if(observers != null || observers.isEmpty()){
			throw new RuntimeException("注册列表为空");
		}
		return observers.remove(observer);
	}

	@Override
	public int notifyObservers() {
		if(observers == null || observers.isEmpty()){
			return 0;
		}
		int result = 0;
		for (int i = 0,size=observers.size(); i < size; i++) {
			Observer o = observers.get(i);
			o.update(temperature, humidity, pressure);
			result++;
		}
		return result;
	}
	
	/**
	 * 主题发生变化,通知观察者
	 */
	public void measurementsChanged() {
		notifyObservers();
	}
	
	/**
	 * 改变主题
	 */
	public void setMeasurements(double temperature, double humidity, double pressure) {
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementsChanged();
	}
}

/**
 * 观察者对象类
 */
public class CurrentConditionsDisplay implements Observer,DisplayElement {

	private double temperature;
    private double humidity;
    private Subject weatherData;
	
	public CurrentConditionsDisplay(Subject weatherData) {
		this.weatherData = weatherData;
		weatherData.registerObserver(this);
	}
	@Override
	public boolean update(double temp, double humidity, double pressure) {
		this.temperature = temp;
		this.humidity = humidity;
		display();
		return true;
	}

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

}

/**
 * 数据源
  */
public class WeatherStation {

	public static void main(String[] args) {
		WeatherData wd = new WeatherData();
		CurrentConditionsDisplay ccd = new CurrentConditionsDisplay(wd);
		wd.setMeasurements(80, 60, 30);
		wd.setMeasurements(81, 61, 31);
		wd.setMeasurements(82, 62, 32);
	}
}

 

分享到:
评论

相关推荐

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

    2.gif、1.gif、3.gif、4.1.gif、4.2.gif这些文件很可能是用来辅助理解观察者模式的图形表示。它们可能展示了主题对象与多个观察者之间的关系,以及当主题状态改变时,观察者如何被通知并更新的流程。 订阅模式: ...

    观察者模式observer

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

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中扮演着重要角色,尤其是在事件驱动编程和发布/订阅系统中。...

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中广泛应用于事件驱动编程,例如用户界面组件的交互或者系统状态的...

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色...通过实践和理解观察者模式,开发者可以更好地应对实时数据更新、事件驱动编程等挑战。

    使用MFC实现观察者模式(Observer)同时兼顾多窗口之间传值

    1. 理解观察者模式的基本概念和作用。 2. MFC的消息机制和消息映射表的使用。 3. 创建抽象观察者和被观察者类,定义通知接口。 4. 使用`CWinThread`实现异步消息处理。 5. 在消息映射表中定义监听的特定消息类型。 6...

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

    通过使用观察者模式,可以实现松耦合,让系统更加灵活,增加新的功能或改变现有行为变得简单。 在实际编程中,要注意的是,过多的观察者可能会导致性能下降,因为通知所有观察者可能是一项昂贵的操作。此外,确保...

    (行为型模式) Observer 观察者模式

    ### (行为型模式) Observer 观察者模式 #### 概述 观察者模式是一种行为设计模式,它定义了一种一对多的关系,让多个观察对象同时监听某一个主题对象。当主题对象发生变化时,所有观察者对象都会收到通知并进行...

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

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

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

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

    设计模式-观察者模式-作业-observer.zip

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

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象...在实际开发中,理解并合理运用观察者模式,能够有效地实现对象之间的交互和通信,提升代码的灵活性和可维护性。

    Observer观察者模式

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

    设计模式-观察者

    《设计模式——观察者》 ...在实际开发中,理解并熟练运用观察者模式能够帮助我们构建更稳定、可维护的系统。无论是简单的用户界面交互,还是复杂的业务逻辑处理,观察者模式都能提供一种有效的解耦方案。

    观察者模式源码

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

    观察者模式模版和例子

    在提供的压缩包文件中,`观察者模式模版和例子`可能包含了实现这些概念的代码示例,通过阅读和理解这些代码,你可以更好地掌握观察者模式的实现细节和应用方式。为了深入学习,建议先了解观察者模式的基本概念,然后...

    一个类实现Android观察者模式(最简单实用的观察者模式)

    观察者模式是软件设计模式中的一种行为模式,它在Android开发中被广泛应用,尤其是在处理事件响应和组件间的通信。这个模式允许对象订阅另一个对象的...理解和熟练运用观察者模式,对于提升Android开发技能至关重要。

    设计模式之观察着模式Observer

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

Global site tag (gtag.js) - Google Analytics