设计模式学习(一)观察者模式
来源:互联网 发布:跳跳软件 编辑:程序博客网 时间:2024/05/17 04:41
所谓观察者模式,是指当主题(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.
观察者模式的类图为:
代码实现:
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;@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic 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);}@Overridepublic void update() {System.out.println(subject.getState());}}
在JDK中提供类似的接口和类:java.util.Observable类(对应Subject)和java.util.Observer接口。一般来讲,如果我们需要只需要扩展这些接口即可。
在实际工作中如何运用模式,是我们学习模式的本意。但是我对于模式的运用还停留在书本的例子上,希望大家探讨如何应用模式到我们具体的工作场景中去。
0 0
- 设计模式学习(一)观察者模式
- 设计模式(一)观察者设计模式
- 设计模式-观察者模式(一)
- 设计模式之观察者模式(一)
- 设计模式之观察者模式(一)
- 设计模式-观察者(一)
- 设计模式学习一 策略模式;观察者模式
- 观察者模式--------设计模式一
- 设计模式一:观察者模式
- 设计模式(一) 观察者模式
- 设计模式--观察者模式(一)
- 设计模式学习--观察者模式(observer)
- 设计模式---观察者模式(学习笔记)
- 设计模式学习(4)观察者模式
- java设计模式学习(一):观察者模式(一)
- 设计模式学习--观察者模式
- 设计模式学习----观察者模式
- 设计模式学习-----观察者模式
- Linux下NFS设置和开发板上加载NFS
- [Leetcode]Excel Sheet Column Title
- Android 权限的申明与保护
- UITableView整理
- Linux有问必答:如何通过命令行创建和设置一个MySQL用户
- 设计模式学习(一)观察者模式
- Leetcode NO.122 Best Time to Buy and Sell Stock II
- SQL 语句总结
- FLEX绘制行政区域地图源码
- java字符串与整数之间的互相转换
- JAVA方法的重载(overload)和覆盖(override)
- linux 下的字体引擎
- Python基础1--数据类型
- H.264 基础及 RTP 封包详解