您的位置:首页 > 其它

观察者模式

2014-02-21 22:15 302 查看

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

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

松耦合设计之所以能让我们建立有弹性的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);
}
}

 

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: