j10*_*j10 2 design-patterns smalltalk
我正在阅读使用doesNotUnderstand实现的smalltalk中的代理模式实现.如果在方案中调用此方法,我没有得到它.有人可以给我一个例子/场景.
doesNotUnderstand:如果方法查找失败,则调用DNU而不是原始消息.以下示例,
nil aSelectorThatDoesNotExist
Run Code Online (Sandbox Code Playgroud)
触发Object上的默认DNU,这将引发MessageNotUnderstood异常.
您可以使用doesNotUnderstand:协议轻松地将消息发送委托给另一个对象.例如,如果我在我的上面添加以下方法Proxy,
doesNotUnderstand: aMessage
^ target perform: aMessage selector withArguments: aMessage arguments
Run Code Online (Sandbox Code Playgroud)
它会将所有未在其Proxy自身上实现的消息转发给另一个target对象.这里重要的是该Proxy对象应该实现尽可能少的方法,否则它们不能被转发.为此菲罗或佳乐有一个ProtoObject只实现了一组基本的方法.通常,代理继承自ProtoObject.