观察者模式 : 一支穿云箭,千军万马来相见
来源:互联网 发布:演唱会app软件推荐 编辑:程序博客网 时间:2024/05/22 06:20
乐视负面消息不断、股价跌跌不休之际,乐视控股的CEO贾跃亭于近日发布了一封全员信,回应近日公司的供应链传闻。在信中,贾跃亭反思乐视公司扩张节奏过快,导致组织与资金面临极大挑战。他表示,乐视的七大生态快速扩张要告一段落,同时承诺他自愿永远只领取公司1元年薪。
耐人寻味的是,在贾跃亭长达5800字的信中,还包含了对乐视生态组织滞后的反思:“在9个月的时间内人员翻了一倍还多。忙的忙死,闲的闲死,人浮于事的现象已经非常严重了。”面对是否将裁员的问题,贾跃亭坚定的回答“不会”。但同时他透露,今年底要进行全面的价值和绩效评估,做到8-10%左右的末位淘汰指标。
本篇是 张拭心 的第二篇投稿,以独特的视角阐述了观察者模式,文风令人印象深刻。文末有作者讲解各种设计模式的合集,感兴趣的可以看一下。
张拭心 的博客地址:
http://blog.csdn.net/u011240877
小时候一块钱就可以在录像厅看一天电影,印象里最喜欢星爷的电影,特别搞笑。
后来渐渐长大,接触了一些人和事,略微懂了他的那些苦笑、狂笑和欲哭无泪。
我喜欢的演员很多,唯独星爷,能让我看到他的照片,有种想哭的感觉。
星爷,may the god bless you.
最近又看了遍《功夫》,其中有一幕:
阿星装比失败,不曾想引来了斧头帮,斧头帮老大一支穿云箭,真的是千军万马来相见,帅呆了!
骨子里也是个古惑仔的我好崇拜这种场景!太帅了!那,这是怎么做到的呢?
首先我得加入斧头帮,成为斧头帮一份子
然后去登记,有啥事方便通知
等老大一发穿云箭
我跟其他小弟就赶紧出现
1. 首先定义 斧头帮老大 AxeGangBoss:
斧头帮老大是消息发布者,当有情况时就调用 sendMsg(…) 方法给小弟发消息。他继承自 Java 源代码提供的 Observable :
Observable 里保存着一个 Observer 的集合,然后提供了添加、删除、提醒等方法。其中重要的是 notifyObservers(…) 方法,当确定出事了(changed 为 true)时 ,挨个通知小弟。
Observer 是一个接口,规定了小弟收到消息的方法 update(…):
public interface Observer {
void update(Observable observable, Object data);}
2. 定义斧头帮小弟 AxeGangPeople,小弟需要按规矩来,实现 Observer 接口:
3. 然后小弟去老大那登记,老大有消息了就射穿云箭:
4. 运行结果:
这种 一对多的通知场景 就是传说中的 观察者模式。
定义:
又称“发布-订阅模式”,定义了一种一对多的依赖关系,一个被观察者持有多个观察者对象的引用,当被观察者状态发生改变时,通知所有观察者进行更新。
UML 图
其中 Subject 是被观察者接口,即上文提到的 Observable ,持有一个观察者接口集合的引用,定义了观察者的添加、删除以及提醒;
ConcreteSubject 实现了被观察者接口,即上文的斧头帮老大 AxeGangBoss,在一定情况下提醒观察者更新;
Observer 是观察者抽象类,定义了更新 update 方法;
ConcreteObserver 是具体观察者,即上文的小弟 AxeGangPeople,重写 update 方法,进行触发操作。里面有时需要持有一个 Subject 的引用。
场景:
有的时候一个状态值会影响许多逻辑,比如电商类软件的位置信息,如果用户切换位置,需要显示对应城市的商品信息、活动、附件的人等等,这时使用观察者模式可以减少对应模块的代码逻辑,直接写好回调方法,等待被回调就好,耦合度降低很多。
备注:
代码地址:
https://github.com/shixinzhang/ShixinDesignPattern
作者的 csdn 设计模式总结文章
http://blog.csdn.net/column/details/zsxdesignpattern.html
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都会有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:
- 观察者模式 : 一支穿云箭,千军万马来相见
- 观察者模式 : 一支穿云箭,千军万马来相见
- 第十三篇:观察者模式 : 一支穿云箭,千军万马来相见
- 快递江湖:一支穿云箭 千军万马来相见
- 一枝穿云箭,千军万马来相见——致2015届电子科大信软学院新生
- 来聊聊观察者模式
- 老师来了——观察者模式
- 设计模式-观察者模式,以及如何使用观察者来为app实现即时通讯功能
- 如何使用委托与事件来实现观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 你们要的多数据库功能终于来了
- RecyclerView、ListView实现单选列表的优雅之路
- 自定义具有Material Design效果的控件
- DownloadManager使用详解
- Android跨进程通信之AIDL快速入门
- 观察者模式 : 一支穿云箭,千军万马来相见
- 仿掌上英雄联盟能力值分析效果
- 利用Jenkins玩转Android自动打包发包
- 为RecyclerView打造右侧索引导航栏IndexBar
- Jni详解
- DataBinding实现原理探析
- 一步步实现精美的钟表界面
- TextInputLayout的使用
- PulmListView:上拉加载更多的ListView