observer-pattern - 在 Smalltalk/VisualWorks 中实现观察者模式

标签 observer-pattern smalltalk visualworks

我是使用模式编程的新手,我花了几个小时寻找模式观察器的 Smalltalk 实现的示例,但徒劳无功。
如果有人能提供我在 Smalltalk 下实现这种模式的具体示例,我将不胜感激。

最佳答案

Smalltalk 中观察者模式的标准实现是#changed/#update机制。

它是这样的:

subject addDependent: anObserver.

subject changed.

然后 anObserver获取发送 #update :
MyObservingObject>>update
  "I got called in a #changed chain"
  super update.
  self doUpdatingStuff

您可以使用 #changed: 进行更好的控制和 #update: (注意冒号):
subject addDependent: anObserver.
subject changed: subject.


MyObservingObject>>update: anObject
  "I got called in a #changed: chain"
  super update: anObject.
  self doUpdatingStuffWith: anObject

但是,通常会发现使用符号来表示更改的内容:
subject addDependent: anObserver.
subject changed: #myNumbers.


MyObservingObject>>update: anObject
  "I got called in a #changed: chain"
  anObject == #myNumbers ifTrue: [
    self doUpdatingStuffForNumbers.
    ^ self "inhibits the super"].
  super update: anObject.

当你看SqueakPharo ,你至少会发现另外三个
观察者实现:
  • Morphic 的事件处理(见 Morph>>#on:send:to:)
  • 类似的、更通用的事件处理机制,参见 Object>>#when:send:to:Object>>#triggerEvent:
  • 公告框架,在类中封装主题和观察者之间的消息。

  • 您可以找到 comparison其中在 Signals project ,另一种实现,但受到 Qt 的启发。

    关于observer-pattern - 在 Smalltalk/VisualWorks 中实现观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17082576/

    相关文章:

    savefiledialog - 使用VW7.8/Jun789 JunFileDialog进行文件保存,下次要记住选择的目录

    smalltalk - 双屏 Pharo/Squeak 环境

    java - 使用观察者模式

    Java 观察者模式 - 如何在更新(通知)循环/迭代期间删除观察者?

    c++ - arb 的静态 ctor/dtor 观察器。 C++类

    android - 我可以从不扩展 Activity 的类(class)发送广播吗?

    smalltalk - 延长吱吱声或 pharo

    java - Java中存在Smalltalk的Detect方法吗?

    Smalltalk 返回优先级

    graphics - 如何将图片(图像)加载到 smalltalk