java设计模式学习笔记6 观察者模式
来源:互联网 发布:2008数据库重建日志 编辑:程序博客网 时间:2024/06/05 01:51
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题对象,当主题对象内部状态发生变化时,通知所有观察者
观察着模式在java中又很重要的应用和地位,在awt,Swing的监听器中应用广泛,java甚至对他提供了内置的支持。
观察者模式有以下组成:
-两个抽象角色:
---抽象主题角色:将所有观察者对象的引用放到一个集合里,提供接口用于增删,一般用抽象类或者接口实现,使用java提供的Observable接口
---抽象观察者:使用java提供的Observer接口
-两个具体角色:
---具体主题角色:当具体主题内部状态改变时,给所有登记过的观察者,发通知,实现Observable接口。
---具体观察者角色:实现Observer接口,重写update方法
测试:
一、具体主题角色,实现java内置的抽象主题接口 Observable
/** * Created by charleszhu on 14-2-3. * 具体主题角色 */public class MyObserverable extends Observable { public void notifyTwoOb(int i){ // 自定义通知方法 for(;i>0;i--){ this.setChanged();//状态改变的时候,一定改变changed的值 this.notifyObservers(i);// 通知所有观察者状态已经发生的变化 } }}二、定义两个观察者角色,方法,实现java内置的Observer接口
/** * Created by charleszhu on 14-2-3. */public class MyObserve implements Observer { // 监听对象,当对象的参数减少时候,输出 @Override public void update(Observable o, Object arg) { // Integer i = (Integer)arg; System.out.println(arg); }}
/** * Created by charleszhu on 14-2-3. */public class MyObserve1 implements Observer { // 监听对象,当对象的参数减少到5的时候,输出 @Override public void update(Observable o, Object arg) { Integer i = (Integer)arg; if (i<=5) System.out.println(i); }}
三 写测试类
/** * Created by charleszhu on 14-2-3. */public class Test { public static void main(String[] args) { // 生成主题对象实例 MyObserverable mb = new MyObserverable(); // 生成两个观察者 Observer o1 = new MyObserve(); Observer o2 = new MyObserve1(); // 将观察者放入主题中 mb.addObserver(o1); mb.addObserver(o2); // 调用通知观察者方法 mb.notifyTwoOb(10); }}
0 0
- java设计模式学习笔记--观察者模式
- java设计模式学习笔记6 观察者模式
- 观察者设计模式--学习笔记
- java 设计模式学习笔记(12) - 观察者模式
- Java设计模式【观察者模式】__学习笔记
- java/android 设计模式学习笔记(2)---观察者模式
- 学习笔记——JAVA设计模式<21>观察者模式
- 学习笔记 ---- 设计模式之观察者模式
- 设计模式之观察者模式学习笔记
- 设计模式学习笔记之观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记--观察者(Observer)模式
- 设计模式---观察者模式(学习笔记)
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记之观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记-观察者模式
- 痛苦的版本对齐(外篇) 是否能够避免版本对齐
- 写在2014
- SYS and SYSTEM Users
- SICP 习题 (1.28)解题总结
- 【js组件】修改cityselect已适应项目
- java设计模式学习笔记6 观察者模式
- 这周结束了
- VC项目配置基础 (VC6.0 和VC2005)
- HDU 1890 Robotic Sort (Splaytree 区间翻转)
- iOS 隐藏键盘
- 心语
- 自己动手编写一个VS插件(八)
- iOS 开发中为什么更新UI都要放在主线程中?
- VisualStudio 2010 UI完全自动化测试实践