smalltalk中的代理模式实现

j10*_*j10 2 design-patterns smalltalk

我正在阅读使用doesNotUnderstand实现的smalltalk中的代理模式实现.如果在方案中调用此方法,我没有得到它.有人可以给我一个例子/场景.

cam*_*uni 5

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.

  • 也许评论如何/为什么`#doesNotUnderstand:`被调用可能是有用的. (2认同)