【观察者模式】(Observer)
来源:互联网 发布:wps办公软件官方下载 编辑:程序博客网 时间:2024/06/07 21:42
【观察者模式】(Observer)
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。
主题通知观察者更新,更新数据可以选择push/pull两种方式, notifyObservers() 或 notifyObservers(Object arg)。
package service;import java.util.Observable;import java.util.Observer;/** * Created by liyang on 2017/12/6. *///观察者1class ObserverTest implements Observer { public ObserverTest(Observable obs) { obs.addObserver(this); } @Override public void update(Observable o, Object arg) {// System.out.println("Programer look the SDK download process is: " + ((Subject) o).getState()); System.out.println("Programer look the SDK download process is: " + arg); }}//观察者2class ObserverTest2 implements Observer { public ObserverTest2(Observable obs) { obs.addObserver(this); } @Override public void update(Observable o, Object arg) {// System.out.println("------ Programer look the SDK download process is: " + ((Subject) o).getState()); System.out.println("------ Programer look the SDK download process is: " + arg); }}//被观察者,主题class Subject extends Observable { private String mState; public String getState() { return mState; } public void netProcessChange(String data) { mState = data; this.setChanged();// this.notifyObservers(); this.notifyObservers(mState); }}//客户端class Main { public static void main(String[] args) { Subject subject = new Subject(); new ObserverTest(subject); new ObserverTest2(subject); subject.netProcessChange("1%"); subject.netProcessChange("51%"); subject.netProcessChange("100%"); }}
总结:
客户端(业务端):1.指定观察者订阅主题。 2.将要修改的状态值传给到主题。
主题(被观察者):1.接收客户端传过来的状态值。 2.setChanged确认已变动。 3.notifyObservers通知观察着们。
观察者们:1. 订阅主题的方法,提供给客户端使用。 2.重写update方法,内部处理相关的业务状态。
阅读全文
0 0
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Observer(观察者)模式
- 观察者模式(Observer)
- Observer(观察者模式)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- 假如让你来设计数据库中间件
- Wdatepicker日期控件
- 移动端滚动加载数据判断是否滚动到页面底部
- PYTHON面向对象编程指南笔记
- intellij no executable code found at line
- 【观察者模式】(Observer)
- 大公司或专业团队目前流行的前端工具有什么?
- sql server 周一为本周第一天
- Linux进程间通信4-6
- ionic3 打包后android中不显示图片
- Android--DES加密解密
- TextView加载Html文本显示图片问题
- 国密杂凑算法SM3
- SpringUtil