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

观察者模式

 
阅读更多

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

设计原则:为了对象之间的松耦合设计而努力。

松耦合设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。

关于观察者的一切,主题只知道观察者实现了某个接口。主题不需要知道观察者的具体类是谁,做了些什么或其他任何细节。

 

最后的例子就是订阅报纸,只要你订购了报纸,就会每天有人给你送报纸。

 

在设计的时候,被观察者被称为主题,主题应该有的动作是:①:增加观察者,②:删除观察者,③:通知观察者。

而在具体的观察者中只需要拥有更新和显示的操作就可以了。

public interface Subject {
	public abstract void addObserver(Observer o);
	public abstract void removeObserver(Observer o);
	public abstract void notifyObserver();
}

 

import java.util.ArrayList;


public class ConcreteSubject implements Subject{
	private ArrayList observers;
	private double temp;
	private double humidity;
	private double pressure;
	public ConcreteSubject(){
		observers=new ArrayList<Observer>();
	}
	public void addObserver(Observer o){
		observers.add(o);
	}
	public void removeObserver(Observer o){
		int i=observers.indexOf(o);
		if(i>=0){
			observers.remove(i);
		}
	}
	public void notifyObserver(){
		for(int i=0;i<observers.size();i++){
			Observer observer=(Observer)observers.get(i);
			observer.update(temp, humidity, pressure);
		}
	}
	public void measurementsChanged(){
		notifyObserver();
	}
	public void setMeasurements(double temp,double humidity,double pressure){
		this.temp=temp;
		this.humidity=humidity;
		this.pressure=pressure;
	}
}

 

public interface Observer {
	public void update(double temp,double humidity,double pressure);
}

 

public class CurrentDisplay implements Observer{
	private double temp;
	private double humidity;
	private ConcreteSubject concreteSubject;
	public CurrentDisplay(ConcreteSubject concreteSubject){
		this.concreteSubject=concreteSubject;//为了删除观察者准备
		concreteSubject.addObserver(this);
	}
	public void update(double temp,double humidity,double pressure){
		this.temp=temp;
		this.humidity=humidity;
		display();
	}
	public void display(){
		System.out.println(this.temp+"-----"+this.humidity);
	}
}

 

 

 

 

分享到:
评论

相关推荐

    设计模式-观察者模式.ppt

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...

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

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

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

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

    Qt设计模式之观察者模式

    本篇文章将深入探讨Qt中的观察者模式(Observer Pattern),这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心...

    java观察者模式观察者模式

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

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

    观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...

Global site tag (gtag.js) - Google Analytics