23种设计模式 第三部分 关系模式(3)观察者模式
来源:互联网 发布:编程语言的3个属性 编辑:程序博客网 时间:2024/05/16 15:05
理解
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,她的所有依赖者都会受到通知并自动更新。
简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化。
MySubject类就是我们的主对象(类似于期刊),Observer1和Observer2是依赖于MySubject的对象(类似于订阅者)。当MySubject变化时,Observer1和Observer2必然变化。AbstractSubject类中定义着需要监控的对象列表,可以对其进行修改:增加或删除被监控对象,且当MySubject变化时,负责通知在列表内存在的对象。
实现
subject接口和实现类:
public interface Subject { /*增加观察者*/ public void add(Observer observer); /*删除观察者*/ public void del(Observer observer); /*通知所有的观察者*/ public void notifyObservers(); /*自身的操作*/ public void operation(); }
public abstract class AbstractSubject implements Subject { private Vector<Observer> vector = new Vector<Observer>(); @Override public void add(Observer observer) { vector.add(observer); } @Override public void del(Observer observer) { vector.remove(observer); } @Override public void notifyObservers() { Enumeration<Observer> enumo = vector.elements(); while(enumo.hasMoreElements()){ enumo.nextElement().update(); } } }
public class MySubject extends AbstractSubject { @Override public void operation() { System.out.println("update self!"); notifyObservers(); } }Observer接口和实现类:
public interface Observer { public void update(); }
public class Observer1 implements Observer { @Override public void update() { System.out.println("observer1 has received!"); } }
public class Observer2 implements Observer { @Override public void update() { System.out.println("observer2 has received!"); } }测试:
public class ObserverTest { public static void main(String[] args) { Subject sub = new MySubject(); sub.add(new Observer1()); sub.add(new Observer2()); sub.operation(); } }输出:
pdate self!observer1 has received!observer2 has received!其实可以用java API内置的观察者模式,原理类似。
java.util包内包含最基本的Observer接口和Observable类,使用方便。可以支持pull或者 push两种方式。java.util.Observable中有两种notifyObservers()方法,一种是notifyObservers(),一种是notifyObservers(Object arg),如果想“推”(push)数据给观察者,就可以吧数据当做数据对象传给notifyObservers(Object arg)方法。否则,观察者就必须从可观察对象中“拉”(pull)数据。
0 0
- 23种设计模式 第三部分 关系模式(3)观察者模式
- 23种设计模式 第三部分 关系模式(1)策略模式
- 23种设计模式 第三部分 关系模式(2)模板方法模式
- 23种设计模式 第三部分 关系模式(4)迭代子模式
- 23种设计模式 第三部分 关系模式(5)责任链模式
- 23种设计模式 第三部分 关系模式(6)命令模式
- 23种设计模式之观察者模式
- 23种设计模式-8-观察者模式
- 23种设计模式之观察者模式
- 23种设计模式之观察者模式
- 23种设计模式:观察者模式
- 23种设计模式13---观察者模式
- 23种设计模式之观察者模式
- 23种设计模式-观察者模式
- 23种设计模式(15)-观察者模式
- java设计模式(3)--观察者模式
- 设计模式(3)观察者模式
- 设计模式:3)观察者模式
- 反意疑问句及其回答用法归纳+习题讲解
- [Unity3D]Shader学习笔记之Shader与DrawCall
- 每日总结【2016-08-29】
- 作用域public,private,protected,以及不写时的区别
- java nio实现读写文件
- 23种设计模式 第三部分 关系模式(3)观察者模式
- Python 黑客 --- 001 UNIX口令破解机
- ScrollView滑动时隐藏头部颜色渐变
- ASP.NET视频知识总结 chapter12
- Scala(三)之“控制结构”
- POJ 1252 Euro Efficiency(完全背包变型)
- Vim中插入等差数值
- 空指针与野指针
- notification android原生消息通知代码详解