观察者(Observer)模式的实例
观察者模式的其他的称呼又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
话说为什么也叫Dependents,为什么叫依赖?(从属者的翻译似乎太过于汉化,姑且叫着依赖吧)它是从这个角度思考的。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
模型-视图(Model/View),如果是C#从业人员,这个就不需要解释太多了,这里大致的说一下。MVVM模式,View:UI界面ViewModel:它是View的抽象,负责View与Model之间信息转换,将View的Command传送到Model;Model:数据层。简单的来说,就是model对象改变了相关的属性,就会立即通知到跟model关联的View对象,这样前端界面就发生了一连串的变化了。
有篇博文介绍观察者模式,引用了下面的例子,不考虑其实现方式。
哈票以购票为核心业务(此模式不限于该业务),但围绕购票会产生不同的其他逻辑,如:
* 1、购票后记录文本日志
* 2、购票后记录数据库日志
* 3、购票后发送短信
* 4、购票送抵扣卷、兑换卷、积分
* 5、其他各类活动等
类似的场景有,新员工入职,会有相关业务产生,如HR登记,财务工资登记,采购部领取工作服通知等等业务。再简单点的,各家快递公司送快递到前台,前台登记,通知相关人员领取。
总结这一类的业务场景,都有一个共同点,就是先发生一个业务A,然后后续的B,C,D等业务都可以并行开展,在不考虑设计模式的情况下,一般的操作大致有两种,一种是同步执行,从B到D依次执行结束。还有一种就是消息队列异步执行,将各种实例需要执行的业务发送给队列,再执行,简单点的,新开3个线程,各自做各自的事情。
如果这种是观察者模式(一个变种,作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。),那么是否合理呢?疑问如下:
设计模式中的抽象主题subject对应的是订单,购票,员工入职等等行为,什么日志,通知,财务登记这些是一组观察者,当然也可以是一个。
如果,把这些场景,放在代理模式下面,如何理解?
快递这个活动,比如员工,我在上班,收快递,包括登记,完全指定前台来代理完成,让她给我代理把事情处理完。员工入职,可以找HR代理把所有剩下的手续事情都办理完毕,如果这样看来。代理模式是否也有一定的符合度呢?
自己给自己的问题,做个大致的解答。他们之间的区别和联系到底在什么地方?
代理模式的核心,在前面讲到了,就是代理者和被代理者都同时具备了抽象的功能,比如这里的前台能做的是收快递,HR登记等。但是收费快递,还得需要本人去付钱才能收货,不能完全交给前台代理了,前台代理只是一部分工作,并且登记入册,只能前台来做,是他自己职责,被代理者也不具备该功能。
另外,代理模式还有一个最大的弊端,这个案例中体现在了,同步,前台可能只有一个,或许有多个,但是针对一个快递单子,他要一件一件的做。和代理模式区别较大。
遇到这个案例,最佳的解决办法就是两种模式结合起来使用。快递公司有很多个,员工有更多了几百到上千个,此时如果不用代理模式,恐怕非常恐怖。但是观察者模式也必须得使用,如果有急件,登记,收费的快递,观察者模式,观察的对象就是拿到快递,接到快递这件事,拿到快递如果是收费,立即登记,并立即通知收件人过来取件或找人代付等等,但是接收快递本身是代理的对象,这个不矛盾,相互依存,不知道自己的描述是否清楚。
观察者模式(C#版见http://www.cnblogs.com/promise-7/archive/2012/05/14/2500759.html)
欢迎拍砖!
相关推荐
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
本篇文章将深入探讨Qt中的观察者模式(Observer Pattern),这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...
观察者模式详解 观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在这个"股票分析程序"中,我们很显然看到它利用了这种模式来实时更新股票...
观察者模式是面向对象设计中的一种经典模式,它在软件工程中扮演着重要的角色,用于实现对象间的松耦合。这种模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者实时...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java或其他面向对象语言中,这种模式通常用于实现事件处理或发布/订阅系统。在给定的“观察者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
### Unity3D设计模式之观察者模式 #### 观察者模式概述 观察者模式(Observer Pattern)是一种软件设计模式,属于行为型模式之一。它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它...
### 观察者模式概述与应用 #### 一、观察者模式定义 观察者模式是一种常用的软件设计模式,主要用于处理对象间的依赖关系。在这种模式下,一个对象(称为“主题”或“被观察者”)负责维护一组依赖于它的对象...