在一个Android应用程序的开发过程中,我遇到了这个设计难题,我现在无法解决。我将感谢任何想法、变通方法或干净的解决方案:)我将尽可能地简化它:
一切都是从一个通用的观察者模式实现开始的。有一个主题在它的公共方法调用时改变状态;有观察者对这些变化作出相应的反应。在这种情况下,主题是一个有状态的主题,这意味着它有一个像自动机一样变化的内部状态控制器(一个int)。每次它的状态发生变化时,它都会像往常一样通知观察者:
但现在想到这种情况:
现在将要发生的事情,由于第二个瀑布,下一个观察者(比方说观察者)将以状态Y(从最后一秒瀑布)接收到通知,相应地操作,当第二个瀑布结束时,PC(程序计数器)将继续第一个通知瀑布,并重新生成观察者旧状态X。这产生了两个主要问题:第一个是观察者以错误的顺序得到新状态的通知(首先是状态Y,然后是状态X,当它应该是相反的方式);第二个也是最重要的,即使是以错误的顺序得到通知,当观察者收到新状态X的通知时,它也是完全错误的,因为主体的真实状态是Y;这就产生了很多问题。
正如您可能已经意识到的那样,当观察者提交主题状态的更改时,当它得到通知而不是只得到来自主题的gettind数据时,就会发生这种情况。我会很感激任何其他的模式或解决方案。也是为了澄清只有一个线程。
提前道谢。
您需要的是某种同步状态传播的信号量。当subject
传播状态更改时,它首先设置一个信号量,该信号量将锁定subject
的任何其他状态更改(或简单地传播状态更改)。这也可以通过subject
的观察者模式内部的堆栈来实现。只有在所有客户端都被告知状态更改之后,信号量才会被释放。通过这种方式,可以保证状态更改的发送按照在subject
上执行的顺序到达所有客户端。
如果您使用状态机对上面的模型进行建模,那么您将使用历史状态机。
是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?
我想知道用模板observer配置的observer模式是否比常规observer模式更方便。模板观察者的概念是一个可观察的类,它具有配置为模板的特定观察者类型。作为一个例子,我将展示一个普通的观察者,并将其与模板观察者进行比较。 正常观察者模式 正常观察者界面: 对于实现NormalObserver接口的每个类,更新函数都是相同的。如果要实现特定的观察者,例如具有不同更新参数的观察者,这会导致问
问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首
主要内容:介绍,实现,Subject.java,Observer.java,BinaryObserver.java,OctalObserver.java,HexaObserver.java,ObserverPatternDemo.java当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知
观察者模式 亦称: 事件订阅者、监听者、Event-Subscriber、Listener、Observer 意图 观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 问题 假如你有两种类型的对象: 顾客和 商店 。 顾客对某个特定品牌的产品非常感兴趣 (例如最新型号的 iPhone 手机), 而该产品很快将会在商店里出售。 顾客
一、定义 观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 在JavaScript中,一般使用事件模型来替代传统的观察者模式。 好处: (1)可广泛应用于异步编程中,是一种替代传递回调函数的方案。 (2)可取代对象之间硬编码的通知机制,一个对象不用再显示地调用另外一个对象的某个接口。两对象轻松解耦。 二、DOM事件–观察者