设计模式学习笔记—观察者模式
来源:互联网 发布:php上传图片前压缩 编辑:程序博客网 时间:2024/05/08 15:58
观察者模式(Observer Pattern)
观察者模式的目标大概是这样
当某个方法执行时去执行一系列的方法
不知道为什么,每当我看到这个模式时就想到按钮点击
public interface OnClickListener { void onClick(Button view);}
public class Button { private Set<OnClickListener> mClickListeners = new HashSet<OnClickListener>(); private String mText; public Button(String text) { mText = text; } public void addOnClickListener(OnClickListener listener) { mClickListeners.add(listener); } public void click() { for (OnClickListener listener : mClickListeners) { listener.onClick(this); } } public String getText() { return mText; }}
调用的时候是这样
Button btn = new Button("btn1"); btn.addOnClickListener(new OnClickListener() { @Override public void onClick(Button view) { System.out.println(view.getText()); } }); // 这个方法一般不会在这里调用 btn.click();
这样的话看起来很眼熟了,但…观察者呢?所以,要改名字。
// 这个是原来的 Button,是被观察的对象public class Subject { private Set<Observer> mObservers = new HashSet<Observer>(); private String mText; public Subject(String text) { mText = text; } public void registerObserver(Observer observer ) { mObservers.add(observer); } public void notifyObservers() { for (Observer observer : mObservers) { observer.notify(this); } } public String getText() { return mText; }}
// 原来的 onclicklistener 是观察者public interface Observer { void notify(Subject view);}
调用的时候并没有该多少
Subject btn = new Subject("btn1"); btn.registerObserver(new Observer() { @Override public void notify(Subject view) { System.out.println(view.getText()); } }); // 这个方法一般不会在这里调用 btn.notifyObservers();
这么一改就变得不那么眼熟了 - -
这个设计模式麻烦的地方应该在于通知的时机,反正是不可能刚添加完事件就去调用的,其它的使用方式,就像刚开始说的那样,适合于需要注册或者订阅,在某种条件下去调用观察者的某个方法。
The end.
0 0
- 设计模式学习笔记—观察者模式
- 观察者设计模式--学习笔记
- 学习笔记 ---- 设计模式之观察者模式
- 设计模式之观察者模式学习笔记
- 设计模式学习笔记之观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记--观察者(Observer)模式
- 设计模式---观察者模式(学习笔记)
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记之观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记十一:观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记--观察者模式
- 高级编程之文件I/O(二)
- TextView的重写
- 书籍收藏
- TCP 端口号用尽解决方案
- 每日一算法8--中文乱码转换
- 设计模式学习笔记—观察者模式
- 假设检验
- 关于struts2的那点事
- Android下怎么使用LDD查看依赖库
- 是谁还在那梦中的江南独上高楼
- uiviewcontroller 状态栏 self.view起始位置
- 2016蓝桥杯假期任务之《幸运数》
- C语言实现strcpy
- 接口测试实践