`
Thomas会Coding
  • 浏览: 93171 次
  • 性别: 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);
	}
}

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics