观察者模式
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); } }
阅读更多
相关文章推荐
- 观察者模式 Observer
- 设计模式之--观察者模式(Observer)
- 观察者设计模式-Observable类和Observer接口
- 观察者设计模式
- .NET面试——老鼠、猫和主人(观察者模式)
- “打雷咯,下雨收衣服了”之观察者模式
- 设计模式——单例模式、工厂模式、代理模式、观察者模式、装饰器模式
- 设计模式之观察者模式
- 设计模式之【观察者模式】
- 设计模式学习笔记之观察者模式
- C# 7.0 观察者模式 以及 delegate 和 event
- 设计模式C++描述----04.观察者(Observer)模式
- 观察者模式 Observer Pattern — 三国演义之超级间谍战 — 美女貂蝉的故事
- Java_观察者模式(Observable和Observer)
- 设计模式之观察者模式(c++)
- 观察者模式Observer
- 深入理解Javascript中的观察者模式
- 设计模式学习笔记-观察者模式
- 观察者(Observer)模式
- 观察者模式