观察者模式
2016-02-25 00:01
253 查看
一、什么是观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
二、观察者模式的本质
观察者模式的本质是触发联动。
三、观察者模式的两种实现
1.推模型
目标对象主动像观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据,相当于广播通信。
2.拉模型
目标对象在通知观察者的时候,值传递少量的信息。如果观察者需要更具体的信息,由观察者主动到目标对象中获取,相当于是观察者从目标对象中拉数据。一般这种模型的实现中,会把目标对象自身通过update方法传递给观察者。
四、推模型和拉模型的比较
我们先对推模型和拉模型做个比较,推模型是目标对象知道观察者需要什么数据,而拉模型是目标对象不知道观察者具体需要什么数据,因此把滋生传给观察者,有观察者来取值。
所以,推模型会使观察者对象难以复用,而拉模型扩展性更好,因为拉模型下的update方法的参数是对象本身,基本哈桑可以适应各种情况的需要。
五、观察者模式的使用场景
1、当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化
2、如果在更改一个对象的时候,需要去同时连带改变其他的对象,而且不知道究竟有多少对象需要被连带改变
3、当一个对象必须通知其他的对象,但是你又希望这个对象和其他被他通知的对象是松散耦合的
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
二、观察者模式的本质
观察者模式的本质是触发联动。
三、观察者模式的两种实现
1.推模型
目标对象主动像观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据,相当于广播通信。
2.拉模型
目标对象在通知观察者的时候,值传递少量的信息。如果观察者需要更具体的信息,由观察者主动到目标对象中获取,相当于是观察者从目标对象中拉数据。一般这种模型的实现中,会把目标对象自身通过update方法传递给观察者。
四、推模型和拉模型的比较
我们先对推模型和拉模型做个比较,推模型是目标对象知道观察者需要什么数据,而拉模型是目标对象不知道观察者具体需要什么数据,因此把滋生传给观察者,有观察者来取值。
所以,推模型会使观察者对象难以复用,而拉模型扩展性更好,因为拉模型下的update方法的参数是对象本身,基本哈桑可以适应各种情况的需要。
五、观察者模式的使用场景
1、当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化
2、如果在更改一个对象的时候,需要去同时连带改变其他的对象,而且不知道究竟有多少对象需要被连带改变
3、当一个对象必须通知其他的对象,但是你又希望这个对象和其他被他通知的对象是松散耦合的
相关文章推荐
- Android SwipeRefreshLayout下拉刷新与上拉加载+滑动删除
- [leetcode] Burst Balloons
- Java9积极解决Linux中的GTK GUI难题
- 【分享】高手Java核心技术学习笔记
- Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结
- 【分享】 Windows 各种计时函数总结
- VIEWGOOD(远古)校园网多媒体系统的搭建
- 微信红包随机算法的实现
- oracle导入、导出
- HTTPClient模块的HttpGet和HttpPost
- 遍历Map的方式: Map.Entry 和 Map.entrySet()
- eclipse 中使用Git
- QSqlQuery::value: not positioned on a valid record
- VS2008中文乱码
- flexible
- mysql-5.7.11-winx64 免安装版(MySQL ZIP Archive版)配置及密码问题处理
- 检测点1.1
- 检测点2.1
- mysql递归查询treeview
- Oracle Connect By Prior(递归查询)简洁实例