设计模式学习总结——观察者模式
2016-01-30 14:45
399 查看
观察者模式将观察者(订阅)和被观察者(公布)分离,实现了代码的松耦合;且定义了一对多的依赖关系,让多个观察者同事监听一个被观察者,同一时候一个被观察者能通知多个观察者更新。
角色:
抽象主题(Subject):又叫抽象被观察者(Observable)。定义一个接口能够添加和删除观察者对象。
抽象观察者(Observer):为全部的详细观察者定义一个借口,做更新操作。
详细主题(Concrete Subject):实现抽象主题接口,将全部的观察者对象的引用保存到一个列表中。
当状态发生改变时,通知列表中的观察者。又称详细被观察者。
详细观察者(Concrete Observer):实现抽象观察者接口,每一个详细观察者更具详细情况实现。
Android开发中。ContentObserver,setOnClickListener。以及自己定义的接口(在Activity中Implements, 传入到异步任务,当任务完毕后,调用接口函数刷新Activity页面)等都是观察者非常好的样例。
而Java本身提供了对观察者模式的支持,java.util库中提供了例如以下两个类:
Observer接口,作为抽象观察者。仅仅定义了一个接口方法update(),每一个详细观察者单独实现。
Observable类,能够作为抽象被观察者或者详细被观察者。由于这个类而非接口,内部实现已经能满足详细被观察者的要求。当然也能继承并扩展此类。Observable类提供了两个重要方法:setChanged(),用于设置内部标志位,标示被观察者发生变化。notifyObservers(),用于调用列表中全部观察者的update()方法。观察者做更新操作。
參考资料:http://www.blogjava.net/supercrsky/articles/202544.html
角色:
抽象主题(Subject):又叫抽象被观察者(Observable)。定义一个接口能够添加和删除观察者对象。
抽象观察者(Observer):为全部的详细观察者定义一个借口,做更新操作。
详细主题(Concrete Subject):实现抽象主题接口,将全部的观察者对象的引用保存到一个列表中。
当状态发生改变时,通知列表中的观察者。又称详细被观察者。
详细观察者(Concrete Observer):实现抽象观察者接口,每一个详细观察者更具详细情况实现。
Android开发中。ContentObserver,setOnClickListener。以及自己定义的接口(在Activity中Implements, 传入到异步任务,当任务完毕后,调用接口函数刷新Activity页面)等都是观察者非常好的样例。
而Java本身提供了对观察者模式的支持,java.util库中提供了例如以下两个类:
Observer接口,作为抽象观察者。仅仅定义了一个接口方法update(),每一个详细观察者单独实现。
Observable类,能够作为抽象被观察者或者详细被观察者。由于这个类而非接口,内部实现已经能满足详细被观察者的要求。当然也能继承并扩展此类。Observable类提供了两个重要方法:setChanged(),用于设置内部标志位,标示被观察者发生变化。notifyObservers(),用于调用列表中全部观察者的update()方法。观察者做更新操作。
參考资料:http://www.blogjava.net/supercrsky/articles/202544.html
相关文章推荐
- php 常用正则函数的使用
- ZOJ-2849-Attack of Panda Virus【bfs】【优先级队列】【4th浙江省赛】【好题】
- 【选择图片Jar】预览图片模块之M与C的实现(九)
- BitmapFactory.decodeStream 内存溢出java.lang.OutOfMemoryError
- Xcode快捷键 ---- 提高效率
- Python面向对象编程(二)
- Android Training 的整理和总结
- 杭电 今年暑假不AC
- Mac下Android studio 之NDK配置教程
- ElasticSearch搜索集群
- 详解java解压缩zip和rar的工具类使用教程
- PHP Session简单应用例程
- Live555在Android下改造
- Jsoncpp的使用
- ubuntu15.04 pip安装Scrapy失败 ImportError: cannot import name IncompleteRead解决方案
- Codeforces 620E New Year Tree dfs + 线段树(区间查询+区间置数) + 位运算
- 一个5年运维工程师的新年回首
- 缓存、缓存算法和缓存框架
- 数据绑定框架:Databinding
- UVA 514