我真的很希望有人能回答这个问题。我认为我绝对不是唯一一个对此感到困惑的人,我无法找到任何清楚解释这个概念的东西。红宝石代表从可可开发人员背景解释
我对委托模式的理解来自于研究Cocoa
框架。对我来说,可可的实施非常明确。但是我很难在Ruby中理解它(标准库的Delegator
,SimpleDelegator
与ActiveSupport
的Delegate
)。这对我来说毫无意义。主要是因为一个是类型安全的,另一个是鸭子类型。你已经可以看到我的观点,但请允许我扩大......这里是我的如何使用可可的委托模式总结:
我们的“成分”是:2类,A
和B
和,这Cocoa是可用于委托的预定义方法集。
的模式的实现,基本上如下:
A
定义了一套方法委托给B
。B
的委托被设置为A
=>
B
现在可以调用委托方法,像这样:@delegate.send(a_delegated_method)
什么我不绑在一起的是红宝石采用鸭打字的事实,所以你可以发送任何方法调用任何对象,对吧?因此,使用我刚刚解释的模式,只要2个对象处于同一个域中,您可以在A
@b.send(:a_delegated_method)
之间说,反之亦然,而在B
@a.send(:another_delegated_method)
。
难道是在Ruby中委托的地方是委托方法被定义的地方吗?意思是我们从A
类别内发送到属性@b
(@b(:delegated_method)
)a :delegated_method
在A
本身内定义的内容?
希望这不是太混乱。我自己很疑惑,为什么代表甚至存在鸭子打字的语言,以及Delegator
,SimpleDelegator
和ActiveSupport
的Delegate
之间有什么区别。
委托是_pattern_。它与打字工作无关。这两件事不仅是正交的,它们完全没有关系。 – matt 2015-02-05 19:33:10
我知道这是一种模式,但我的问题更多地是关于在两种不同的环境中实施模式的变化,如果这是有道理的。 – believesInSanta 2015-02-05 20:10:39