`
gaojingsong
  • 浏览: 1152721 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【观察者模式】的故事来源(Observer Pattern)

阅读更多
(《芈月传》是由东阳市花儿影视文化有限公司出品的古装剧,由郑晓龙执导,孙俪、刘涛、马苏、方中信、黄轩、高云翔等主演。 讲述了中国历史上第一个女政治家芈月极为曲折传奇的人生故事,每当有新的剧情更新时候,即剧情更新后,那些热爱观看的观众就会立马得到信息进行观看【收到通知】)

观察者模式:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。
 
故事一:一个人放风发命令--逃跑,多个人实施--闻风而逃
还记得警匪片上,匪徒们是怎么配合实施犯罪的吗?一个团伙在进行实施犯罪的时候,总有一两个人在门口把风——如果有什么风吹草动,则会立即通知里面的同伙紧急撤退。也许放风的人并不一定认识里面的每一个同伙;而在里面也许有新来的小弟不认识这个放风的。但是这没什么,这个影响不了他们之间的通讯,因为他们之间有早已商定好的暗号。
呵呵,上面提到的放风者、实施者之间的关系就是观察者模式在现实中的活生生的例子。
 
故事二:一个人举锤,多个人知道价格变化
观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。
 
故事三:一篇文章更新,多个人知道变化
博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些订阅的读者就会收到通知,然后进行相应的动作,比如去看文章,或者收藏起来。博主与读者之间存在种一对多的依赖关系。(《芈月传》是由东阳市花儿影视文化有限公司出品的古装剧,由郑晓龙执导,孙俪、刘涛、马苏、方中信、黄轩、高云翔等主演。 讲述了中国历史上第一个女政治家芈月极为曲折传奇的人生故事,每当有新的剧情更新时候,即剧情更新后,那些热爱观看的观众就会立马得到信息进行观看【收到通知】)
 
故事四:一产品价格发生了改变,多个人知道变化
网上商店的产品价格发生了改变,需要向注册用户发送e-mail或者短信时,就可以用到Observer设计模式。
 
观察者模式中主要有观察者和被观察者2个对象,而在观察模式中Observable表示被观察者,由于这个对象是一个抽象类只能被继承。而Observer表示观察者,它并不是一个类而是一个接口,所以观察者可以有多个,实现了该接口的类都属于观察者。 当然有人会问既然被观察者是一个抽象类而观察者是一个接口,那么是否有一个类即继承Observable类又实现Observer接口呢,这个自然可以,观察者当然也可以同时是被观察者,被观察者同样可以是观察者,在这里完全不冲突。
 
故事五:一个人搜集MM情报,多个人知道MM变化
想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦  
 
故事六:一条新闻更新,多个人收到邮件
你用过邮件订阅吗? 就是有新的新闻。他会自动发邮件给你。
你也可以点一个链接取消订阅。
你就是观察者。
好处,你会自动获得你感兴趣(订阅)的信息,而无需自己亲自访问
而信息发布者也无需关心你是谁,只要你订阅了,我就发给你就好了。
 
被观察者(Observable)与观察者(Observer)
   当某一个我们需要被观察的对象继承自Observable类时,就表示该类可以被很多观察者(实现了Observer)观察,其实意思就是说这个对象也就是被观察者“上电视了”,电视前的你也就是观察者可以看,(对象发生变化)电视里被观察者做了别的动作,那么电视前的所有人看到的也就变了,在同一时间改变所有观众看到的画面。
观察者模式优点:
(1)观察者模式在被观察者和观察者之间简历一个抽象的耦合.被观察者所知道的只是一个具体观察者的聚集,每一个具体观察者都符合一个抽象观察者的接口.被观察者并不认识任何一个具体观察者,它只知道他们都有一个共同的接口.由于观察者和被观察者没有紧密的耦合在一起,因此他们可以属于不同的抽象化层次.如果观察者和被观察者都被扔在一起,那么这个对象必然跨越抽象化和具体化层次.(2)观察者模式支持广播通信.被观察者会向所有登记过的观察者发出通知.
用处:
一个软件系统常常要求在某一个对象状态发生变化的时候,某些其他的对象作出相应的改变.为了减少对象之间的耦合有利于系统的复用,但是需要这些低耦合的对象之间能够维持行动的协调一致,保证高调的动作.------观察者模式最能满足这一需求.
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有的观察者对象,使他们能够自动更新自己.
 
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics