《Android源码设计模式》读书笔记 (12) 第12章 观察者模式
2016-02-17 23:50
609 查看
前言
最近在做IM即时通讯语音录制发送这个模块的时候,用到了观察者模式,因此结合书上内容在加深了一遍,不得不说观察者模式是一个使用率非常高的模式.定义
定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新作用:将观察者和被观察者解耦.最常用在GUI系统,订阅-发布系统.笔者遇到的场景是聊天语音播放和控制.
应用场景:关联行为场景,多级触发场景,系统的消息交换场景;
UML类图
Subject:被观察者
/** * 被观察者 接口 * 作用: 提供增删,通知观察者的方法 * @author max * @date 2016年2月17日 * * */ public interface Subject { //增 void addObserver(Observer observer); //删 void deleteObserver(Observer observer); //通知--这里可以自己根据实际业务需求,传递参数,通知所有观察者要做的事 void notifyObserver(); }
ConcreteSubject:具体被观察者
/** * 具体被观察者, * 作用:1.实现Subject接口 2.保存所有观察者对象 * @author max * @date 2016年2月17日 * */ public class ConcreteSubject implements Subject{ private List<Observer> list = new ArrayList<>(); @Override public void notifyObserver() { if (list != null && list.size() > 0) { //遍历所有观察者,接收通知,实现具体业务逻辑 for (Observer observer : list) { observer.update(); } } } @Override public void addObserver(Observer observer) { list.add(observer); } @Override public void deleteObserver(Observer observer) { list.remove(observer); } }
Observer:观察者,
/** * 观察者接口 * 作用:提供update方法,收到被观察者通知,实现具体业务 * @author max * @date 2016年2月17日 * */ public interface Observer { void update(); }
ConcreteObserver:具体观察者.
/** * 具体观察者,实现业务逻辑 * @author max * @date 2016年2月17日 * */ public class ConcreteObserver implements Observer{ @Override public void update() { //根据自己业务需求,写观察者收到被观察者变化的业务逻辑代码 } }
具体使用场景:拟被观察者Subject发生变化,所有观察者接收到通知,实现所有观察者update()业务过程
/** * 模拟被观察者Subject发生变化,所有观察者接收到通知,实现其业务过程 */ private void simple() { //被观察者 Subject subject = new ConcreteSubject(); //所有观察者 Observer observer1 = new ConcreteObserver(); Observer observer2 = new ConcreteObserver(); Observer observer3 = new ConcreteObserver(); Observer observer4 = new ConcreteObserver(); //加入到所有观察者集合里面去 subject.addObserver(observer1); subject.addObserver(observer2); subject.addObserver(observer3); subject.addObserver(observer4); //被观察者状态发生改变,通知所有观察者,所有观察者执行update()方法,会分别取执行4个具体observer的update()方法 subject.notifyObserver(); }
源码下载
点击下载Android简单观察者模式源码demo相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories