Smalltalk中的事件处理



如何在Smalltalk中创建自己的事件?我基本上是寻找一些软件事件,可以触发当一些特定的事件发生。

在经典的Smalltalk(由Squeak作为原始XEROX Parc图像的直接衍生物支持)中,您有一个基本的发布/订阅模型。在协议浏览器中查找Object实例的"event"

在现代Smalltalk中,您可以使用Exception类及其子类来使用catch/throw用户定义事件。有关详细信息,请参阅Exception类文档。

您还可以选择在Squeaksource中提供的公告框架,作为经典事件框架的更灵活的版本。

回顾一下,事件是基于观察者模式的,其中主题依赖观察其上选定的事件

这在它们之间创建了松耦合关系。

在Squeak或Pharo中,在一些同时知道受试者和观察者的方法中,你会这样做:

观察

elevatorPanel when: #openDoorClicked send: #onOpenDoorClicked to: elevator
事件触发

另一方面,当selfelevatorPanel时:

self triggerEvent: #openDoorClicked

您将有elevator接收onOpenDoorClicked的消息。

类似地,您可以使用参数:

elevatorPanel when: #floorSelected: send: #onFloorSelected: to: elevator with: floorNumber

在这种情况下,您可以通过两种方式触发,首先

self triggerEvent: #floorSelected:

这将使elevator观察者实例接收以floorNumber为参数的onFloorSelected:消息。

第二,在触发时间重写该值

self triggerEvent: #floorSelected: with: aFresherFloorValue

在这种情况下,您还将有elevator接收onFloorSelected:,但aFresherFloorValue而不是floorValue在观察设置期间捕获。

相关内容

  • 没有找到相关文章

最新更新