问题标签 [observer-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - PrototypeJS 观察窗口尺寸变化?
我正在尝试创建自己的“模态”窗口,因为 PrototypeJS 目前存在的这些窗口都不符合我的需求。
问题是观察 document.documentElement 以了解视口(或 document.body,取决于 Quirks/Standard 模式)的高度和宽度的变化。
php - 如何在 PHP + Javascript/jQuery 上实现观察者模式?
就像在 SO 中回答问题一样,如果有人回答了所述问题,则会出现通知(通过 AJAX?)。我在某种程度上复制这一点的唯一方法是在我的脚本中包含一个超时,如果每 n 秒有一次更新,该超时就会获取。有没有办法在 PHP + Javascript(w/jQuery)上使用观察者模式来做到这一点?
iphone - 用于视图控制器的观察者 iphone
有什么方法可以检查当前导航控制器或当前在应用程序委托方法中可见的视图控制器。
我想在应用程序委托中创建一个观察者,观察控制器被推送并从堆栈中弹出,以便我可以显示所需的选项卡栏控制器。基本上我的应用程序有多个标签栏控制器。
garbage-collection - 当观察模式导致 GC 问题时
在支持 GC 的语言中,当观察者订阅主题的事件时,实际上主题得到了观察者的引用。
因此,在删除观察者之前,它必须先取消订阅。否则,因为它仍然被主题引用,它永远不会被垃圾收集。
通常有3种解决方案:
- 手动取消订阅
- 弱参考。
它们都会导致其他问题。
所以通常我不喜欢使用观察者模式,但我仍然找不到任何替代品。
我的意思是,这种模式以如此自然的方式描述事物,以至于您几乎找不到更好的方法。
你怎么看待这件事?
java - 观察者模式重载
我坚持以下情况。它有一种代码味道,我对此并不满意,但解决它的方法似乎同样复杂,只是方式不同。
我有一个表示业务对象的场景图。我对其进行了设计,以使业务对象本身尽可能简单。它们实际上是 POJO。
现在,1 个实体可能由不同的节点显示在场景图的多个区域中。
当实体发生变化时,所有相关的场景图节点都应该发生变化。
我很犹豫是否在我的所有实体上使用观察者模式,因为我一次在屏幕上有超过 50000 个实体。
由于所有更改都是从视图启动的,所以现在我在场景图上递归并强制重新加载与更改的实体关联的所有节点。不过感觉不太对。
关于如何做得更好的任何建议?
design-patterns - 在网络上使用观察者模式进行棋盘游戏
我正在寻找基于 C++ 风险的网络棋盘游戏。我的想法是有一个中央服务器来托管一个游戏大厅,用户可以在其中连接和制作/加入游戏。在这种情况下,观察者模式似乎很有吸引力,因为我可以在服务器上托管所有游戏模型/逻辑,而客户端只是对此的观察者并使用视图显示当前游戏状态。
我的第一个问题:这种方法可行吗?我听到/想到的大部分内容是客户有自己的游戏模型。但是,我正在考虑对于计算量不高的游戏,由服务器托管的单个模型将具有优势(没有不同步问题,防止作弊等)。
我的第二个问题:我将如何通过网络实现观察者模式?由于我无法通过网络直接调用方法,因此我需要某种简单的方法来使用数据来模拟它。使用“拉”(观察者请求更新游戏数据)或“推”(服务器向所有客户端推送新的更新数据)方法会有更多优势吗?
java - 观察者设计模式
在观察者设计模式中,主体通过调用每个观察者的操作来通知所有update()
观察者。一种方法是
但是这里的问题是每个观察者都按顺序更新,并且在更新之前可能不会调用观察者的更新操作。如果有一个观察者有一个无限循环的更新,那么它之后的所有观察者将永远不会被通知。
问题:
- 有没有办法解决这个问题?
- 如果是这样,什么是一个很好的例子?
python - Python 观察者模式:示例、提示?
有没有用 Python 实现的 GoF Observer 示例?我有一个位代码,目前有一些调试代码通过键类绑定(如果设置了魔法环境,则当前向 stderr 生成消息)。此外,该类有一个接口用于增量返回结果以及将它们存储(在内存中)以进行后期处理。(该类本身是一个作业管理器,用于通过 ssh 在远程机器上同时执行命令)。
目前该类的用法如下所示:
另一种使用模型是:
这一切都适用于当前的实用程序。但是,它确实缺乏灵活性。例如,我目前支持简要输出格式或进度条作为增量结果,我还支持该post_process()
功能的简要、完整和“合并消息”输出。
但是,我想支持多个结果/输出流(终端的进度条、日志文件的调试和警告、成功作业的输出到一个文件/目录、错误消息和来自不成功作业的其他结果到另一个, ETC)。
这听起来像是需要观察者的情况......让我的类的实例接受来自其他对象的注册,并在它们发生时用特定类型的事件回调它们。
我正在查看PyPubSub,因为我在 SO 相关问题中看到了几个对它的引用。我不确定我是否准备好将外部依赖项添加到我的实用程序中,但我可以看到使用他们的接口作为我的模型的价值,如果这会让其他人更容易使用的话。(该项目既是一个独立的命令行实用程序,也是一个用于编写其他脚本/实用程序的类)。
简而言之,我知道如何做我想做的事……但是有很多方法可以完成它。我想就从长远来看最有可能对代码的其他用户起作用的建议提出建议。
代码本身位于:classh。
c++ - shared_ptr、订阅、析构函数
我在整个应用程序中使用 Boost/shared_ptr 指针。当对对象的最后一个引用被释放时,shared_ptr 将为我删除该对象。应用程序中的对象订阅应用程序中心位置的事件,类似于观察者/订阅者模式。
在对象析构函数中,对象将从订阅列表中取消订阅。订阅列表本质上只是一个list<weak_ptr<MyObject> >
. 我想做的是与此类似的事情:
我的问题是不能在析构函数中调用 shared_from_this ,所以上面的代码会抛出异常。
在我的旧实现中,订阅列表只是一个指针列表,然后它就起作用了。但我想改用weak_ptr 引用来降低我通过手动内存管理搞砸内存的风险。
由于我依赖 shared_ptr 来执行对象删除,因此我的代码中没有一个地方可以逻辑地调用 Unsubscribe。
关于在这种情况下该怎么做的任何想法?
java - 拥有 Collection Listener 的好方法?
有没有比将它包装在实现观察者模式的类中更好的方法来让一个 java 集合上的侦听器?