`
gaojingsong
  • 浏览: 1238965 次
  • 性别: 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
分享到:
评论

相关推荐

    设计模式之观察者模式(Observer Pattern)

    "ObserverPattern(订阅模式)3.zip"中的代码可能进一步阐述了观察者模式,这里的“订阅”一词可能意味着用户可以订阅特定的主题,只有当这些主题的状态改变时,用户才会收到通知。这与传统的观察者模式类似,但更加...

    观察者模式(Observer Pattern) 1. 什么是观察者模式? 2. 为什么需要观察者模式? 3. 观察者模式的核心概念 4. 观察者模式的结构 5. 观察者模式的基本实现 简单的气象站示例

    观察者模式(Observer Pattern) 1. 什么是观察者模式? 2. 为什么需要观察者模式? 3. 观察者模式的核心概念 4. 观察者模式的结构 5. 观察者模式的基本实现 简单的气象站示例 6. 观察者模式的进阶实现 推模型 vs 拉...

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    设计模式- 观察者模式 Observer Pattern详解

    首先,观察者模式的经典实现涉及两个主要对象:主题(Subject)和观察者(Observer)。主题维护一组观察者,并在状态变化时通知它们。观察者则订阅主题,以便在主题状态改变时接收通知。在C#中,这通常通过接口来...

    swift-Swiftµframework实现观察者模式Observerpattern

    Swift µframework 实现观察者模式Observer pattern

    ObserverPattern

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,属于对象交互模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于...

    观察者模式,Observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    [行为模式]head first 设计模式之观察者模式(observer)

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...

    observer-pattern-demo 观察者模式示例

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java中,我们可以利用Java的内置接口`java.util.Observer`和`java.util....

    C#设计模式(17)——观察者模式(Observer Pattern).pdf

    从生活中的例子可以看出,只要对订阅号... 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的行为。

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    观察者模式(Observer)原理图

    观察者模式(Observer Pattern)是一种对象行为型设计模式,它定义了对象之间的一对多依赖关系。 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统...

    设计模式-观察者模式-作业-observer.zip

    观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...

    observer观察者模式

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在软件工程中,这常用于实现事件驱动编程,使得系统能够及时响应变化。 在...

    观察者模式observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动编程或者...

    简单理解观察者模式(Observer)

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的编程模型...

    设计模式实现——观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...

    OBserver模式设计实现

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java和C++等面向对象编程语言中,这种模式广泛用于事件处理和实时系统,...

    观察者模式源码

    观察者模式(Observer Pattern)是软件设计模式的一种,属于行为型模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,观察者模式主要通过...

    56丨观察者模式(上):详解各种应用场景下观察者模式的不同实现方式1

    观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到通知。 观察者模式...

Global site tag (gtag.js) - Google Analytics