2014-06-18 59 views
0

我知道委託方法調用有三種方法。ruby​​中的委託人

  1. SimpleDelegator
  2. 使用DelegateClass
  3. 使用抽象類委託者

我知道什麼是委託和它是如何工作。我知道如何使用SimpleDelegator委託方法調用。但我不確定何時使用它們。任何人都可以給我一些關於何時使用它們的提示。以及如何使用DelegateClass完成委派。

回答

0

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準備一個委託類與預定義的方法。與此不同的是,當您使用SimpleDelegatorDelegator時,它取決於method_missing,因此如果您的委託人沒有請求的方法,它將通過method_missing代理委託對象。如果準備好的基類具有DelegateClass,則會有已定義的方法調用委託對象上的相同方法。所以DelegateClass提供了一個更有效的委派方式。