design-patterns - Smalltalk中的代理模式实现

标签 design-patterns smalltalk

我正在阅读 Smalltalk 中的代理模式实现,它是使用 doesNotUnderstand 实现的。 我不知道什么时候会像场景中那样调用这个方法。有人可以给我一个例子/场景吗?

最佳答案

doesNotUnderstand: 或如果方法查找失败,则调用 DNU 而不是原始消息。下面的例子,

nil aSelectorThatDoesNotExist

触发对象上的默认 DNU,这将引发 MessageNotUnderstood 异常。

您可以使用 doesNotUnderstand: 协议(protocol)轻松地将消息发送委托(delegate)给另一个对象。例如,如果我在我的 Proxy 上添加以下方法,

doesNotUnderstand: aMessage
    ^ target perform: aMessage selector withArguments: aMessage arguments

它将把Proxy本身未实现的所有消息转发到另一个target对象。这里重要的是 Proxy 对象应该实现尽可能少的方法,否则它们无法转发。为此PharoSqueak有一个仅实现一组基本方法的 ProtoObject。通常,代理继承自 ProtoObject

关于design-patterns - Smalltalk中的代理模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16183309/

相关文章:

c++ - 保理技术找到类似的方法?

smalltalk - 代码中的 Squeak Smalltalk 垂直箭头

smalltalk - Lively Kernel 人员是否提供对其最新版本的匿名/只读 SVN 访问?

smalltalk - 如何从关闭的工作区中恢复脚本

c# - 在哪里构建一次性依赖项以提高可测试性?

java - 实现上传功能的最佳设计模式

oop - Smalltalk:原语是如何实现的?

smalltalk - 从多个参数创建对象的类方法

java - 使用访问者模式时是匿名还是真实的类定义?

javascript - 循环遍历 jQuery 元素并如图所示对它们进行排序