观察者模式
来源:互联网 发布:mac修改mysql登录密码 编辑:程序博客网 时间:2024/06/04 01:14
最近在看headfirst设计模式,特别记录下自己的理解
什么是观察者模式呢?
我的理解是在该模式中至少有一个subject(主题)作为被观察者(Observable),一个或者多个对该主题感兴趣的观察者(observer)注册到该主题上,每当主题状态有所改变,subject负责通知到注册的观察者对象我的状态改变咯,具体的业务逻辑怎么改变就是观察者自己的事情了。
以上也可以看出其它的一些内容:
1、subject能够知晓有那些观察者对象,但是对于每个观察者对象具体的内部执行就不清楚了。
2、注册--通知的模式,对于观察者和被观察者来说,状态改变数据的传递到底是由被观察者推数据还是由观察者来拉数据,也是可以根据实际的业务情况和代码来确定。
简单的画了个图来帮助理解
观察者模式java实现
再次运行main方法,看下结果
可以看到运行之后的输出内容和我们之前自己写的代码输出是不一致的。因为Observable自己实现了自己的notifyObservers方法,不清楚的童鞋可以自己看下jdk的源码
所以我们的代码不能有依赖于次序,不然就会出现问题,这个是个坑,小心咯。
3、那用观察者模式有什么好处或者问题
交互对象之间的松耦合。对于观察者来说,可能后续会有新的观察者加入或者离开,这都不影响主题或者被观察者的逻辑。主题或被观察者状态变化之后,也能立即让对该状态感兴趣的观察者接收到通知。
观察者可以从被观察者处选择是推数据还是自己去拉数据
那问题呢
一个是如果使用jdk的实现,多个观察者不能依赖特定的通知次序
一个是如果使用主题继承Observable抽象类时,代码的灵活性会受到一些影响。毕竟java是不支持多继承的。
好吧,这次文章就先到这里吧
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- vsftpd 安装与详情
- Cookie/Session机制详解
- android TabLayout的简单使用
- 最全的JS DOM操作集合
- Android笔试面试指南
- 观察者模式
- PullToRefreshScrollView和Banner
- 普元EOS之我要初始化数据库
- redis学习系列(八)--redis-AOF基础
- CSS3实现三角形
- ASP.NET的DataList和Repeater控件
- python-sklearn中RandomForestClassifier函数以及ROC曲线绘制
- 通过代码认识openstack 环境中连接到rabbit服务器
- JavaScript继承的方式