繁体   English   中英

Smalltalk 中的事件处理(squeak)

[英]Event Handling in Smalltalk(squeak)

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

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

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

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

回顾一下,事件基于观察者模式,在这种模式下,主体依赖者观察选定的事件

这就造成了它们之间的松耦合关系。

在 Squeak 或 Pharo 中,以某种同时了解主体和观察者的方法,你会这样做:

观察

elevatorPanel when: #openDoorClicked send: #onOpenDoorClicked to: elevator

事件触发

另一方面,自我是电梯面板:

self triggerEvent: #openDoorClicked

您将让elevator接收onOpenDoorClicked消息。

同样,您可以使用参数来实现:

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

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

self triggerEvent: #floorSelected:

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

其次,在触发时间覆盖该值

self triggerEvent: #floorSelected: with: aFresherFloorValue

在这种情况下,您还将让elevator接收onFloorSelected:但使用一个aFresherFloorValue而不是在观察设置期间捕获的floorValue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM