设计模式学习(一)观察者模式
2015-03-13 14:17
357 查看
所谓观察者模式,是指当主题(subject)发生变化的时候,自动的将变化通知给关心主题变化的观察者(observer),这里的观察者一般是多个。
《Head First Design Patterns》给出的定义是:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
英文原文是:Observer defines an one-to-many dependency between objects so that one object changes state,all of its dependents are notified and updated automatically.
观察者模式的类图为:
代码实现:
在JDK中提供类似的接口和类:java.util.Observable类(对应Subject)和java.util.Observer接口。一般来讲,如果我们需要只需要扩展这些接口即可。
在实际工作中如何运用模式,是我们学习模式的本意。但是我对于模式的运用还停留在书本的例子上,希望大家探讨如何应用模式到我们具体的工作场景中去。
《Head First Design Patterns》给出的定义是:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
英文原文是:Observer defines an one-to-many dependency between objects so that one object changes state,all of its dependents are notified and updated automatically.
观察者模式的类图为:
代码实现:
package patterns.observer; public interface Subject { public void registerObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObservers(); }
package patterns.observer; public interface Observer { public void update(); }
package patterns.observer.impl; import java.util.ArrayList; import java.util.List; import patterns.observer.Observer; import patterns.observer.Subject; public class ConcreteSubject implements Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state = 0; @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for(Observer observer : observers) { observer.update(); } } public int getState() { return state; } public void setState(int state) { this.state = state; notifyObservers(); } }
package patterns.observer.impl; import patterns.observer.Observer; public class ConcreteObserver implements Observer { private ConcreteSubject subject; public ConcreteObserver(ConcreteSubject subject) { this.subject = subject; subject.registerObserver(this); } @Override public void update() { System.out.println(subject.getState()); } }
在JDK中提供类似的接口和类:java.util.Observable类(对应Subject)和java.util.Observer接口。一般来讲,如果我们需要只需要扩展这些接口即可。
在实际工作中如何运用模式,是我们学习模式的本意。但是我对于模式的运用还停留在书本的例子上,希望大家探讨如何应用模式到我们具体的工作场景中去。
相关文章推荐
- 设计模式深入学习--Observer 观察者模式(行为型模式)
- Java设计模式(6)之观察者模式学习总结
- Java-马士兵设计模式学习笔记-观察者模式-OOD线程
- 关于js的设计模式之学习(一)---观察者模式
- 设计模式 学习笔记(6)观察者模式
- 设计模式学习笔记-观察者模式
- java设计模式学习之观察者模式
- 设计模式学习--观察者模式(Oberser Pattern)
- 学习设计模式--观察者模式(C++)
- 11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记
- C#设计模式学习小结之三 观察者模式
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 设计模式学习日志八:观察者模式(原文转载)
- 设计模式学习-每日一记(14.观察者模式)
- 设计模式学习(二): 观察者模式 (C#)
- java学习之路----设计模式----观察者模式
- java设计模式学习之观察者模式(一)
- “设计模式”学习之八:备忘录、观察者与状态(行为型)
- 设计模式学习笔记--观察者模式(Observer Pattern)
- 设计模式学习笔记(16)——观察者模式