我正在阅读 Smalltalk 中的代理模式实现,它是使用 doesNotUnderstand 实现的。 我不知道什么时候会像场景中那样调用这个方法。有人可以给我一个例子/场景吗?
最佳答案
doesNotUnderstand:
或如果方法查找失败,则调用 DNU 而不是原始消息。下面的例子,
nil aSelectorThatDoesNotExist
触发对象上的默认 DNU,这将引发 MessageNotUnderstood
异常。
您可以使用 doesNotUnderstand:
协议(protocol)轻松地将消息发送委托(delegate)给另一个对象。例如,如果我在我的 Proxy
上添加以下方法,
doesNotUnderstand: aMessage
^ target perform: aMessage selector withArguments: aMessage arguments
它将把Proxy
本身未实现的所有消息转发到另一个target
对象。这里重要的是 Proxy 对象应该实现尽可能少的方法,否则它们无法转发。为此Pharo或Squeak有一个仅实现一组基本方法的 ProtoObject
。通常,代理继承自 ProtoObject
。
关于design-patterns - Smalltalk中的代理模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16183309/