我知道委託方法調用有三種方法。ruby中的委託人
- SimpleDelegator
- 使用DelegateClass
- 使用抽象類委託者
我知道什麼是委託和它是如何工作。我知道如何使用SimpleDelegator委託方法調用。但我不確定何時使用它們。任何人都可以給我一些關於何時使用它們的提示。以及如何使用DelegateClass完成委派。
我知道委託方法調用有三種方法。ruby中的委託人
我知道什麼是委託和它是如何工作。我知道如何使用SimpleDelegator委託方法調用。但我不確定何時使用它們。任何人都可以給我一些關於何時使用它們的提示。以及如何使用DelegateClass完成委派。
SimpleDelegator
只是Delegator
的基本實現。 DelegateClass
實際上是一個定義委託者類的方法。 Delegator
代表通過method_instance
,DelegateClass
創建一個新類,它實現了超類給定的相同API。
所以,當你不需要什麼特別的東西,你會帶SimpleDelegator
去:
class AuthorDecorator < SimpleDelegator
def hi!
"Hi, #{name}!"
end
end
# assuming author is an object that responds to :name method
AuthorDecorator.new(author).hi! # => "Hi, Rohan!"
如果要實現更復雜的東西,例如你想完全控制__setobj__
和__getobj__
方法(例如對於類型強制),你可以使用Delegator
。
正如我上面所說的,DelegateClass
準備一個委託類與預定義的方法。與此不同的是,當您使用SimpleDelegator
或Delegator
時,它取決於method_missing
,因此如果您的委託人沒有請求的方法,它將通過method_missing
代理委託對象。如果準備好的基類具有DelegateClass
,則會有已定義的方法調用委託對象上的相同方法。所以DelegateClass
提供了一個更有效的委派方式。