【发布时间】:2012-10-17 18:46:52
【问题描述】:
可能我遗漏了一些简单的东西,但我不明白如何使用 Ruby 的 DelegateClass 方法,我的意思是何时使用它而不是 SimpleDelegator 类。例如,以下所有的工作似乎几乎相同:
require 'delegate'
a = SimpleDelegator.new([0])
b = DelegateClass(Array).new([0])
c = DelegateClass(String).new([0])
a << 1
b << 2
c << 3
p a # => [0, 1]
p b # => [0, 2]
p c # => [0, 3]
请注意,将哪个类传递给DelegateClass 似乎并不重要。
【问题讨论】:
-
在考虑了一段时间之后,整个委托模式在我看来就像一个快速肮脏的黑客:)。您发送一条消息,但您不知道哪个班级将负责回答。委托人在不知道是否以及如何回答的情况下传递它无法识别的所有消息(否则它可以实现为子类,或者使用组合,不是吗?)。原来的类不再真正控制任何东西,甚至不知道它和世界其他地方之间有一个委托人。
标签: ruby design-patterns delegation