2014-06-18 4 views
0

위임 메서드 호출에는 세 가지 방법이 있다는 것을 알고 있습니다. 추상 클래스 위임자를 사용 DelegateClass 루비의 위임자

  • 를 사용

    1. SimpleDelegator

    I 위임 및 작동 방법이 무엇인지 알고있다. SimpleDelegator를 사용하여 메서드 호출을 위임하는 방법을 알고 있습니다. 그러나 나는 언제 그들을 사용할 것인지 모르겠습니다. 아무도 나에게 그들을 사용할 때 어떤 힌트를 줄 수 있습니다. DelegateClass를 사용하여 위임을 수행하는 방법.

  • 답변

    0

    SimpleDelegator은 단지 Delegator의 기본 구현입니다. DelegateClass은 실제로 위임자 클래스를 정의하는 메서드입니다. 은 method_instance을 통해 위임하지만 DelegateClass은 수퍼 클래스와 동일한 API를 구현하는 새 클래스를 만듭니다.

    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!" 
    

    을 좀 더 복잡한 뭔가, 예를 구현하려는 경우, 당신은 SimpleDelegator와 함께 갈 것입니다 당신이 특별한 아무것도 필요하지 않습니다 그래서

    , 당신은 Delegator과 함께 갈 __setobj____getobj__ 메소드 (예 : 타입 강제 변환)를 완전히 제어하고 싶습니다.

    앞서 말했듯이 DelegateClass은 미리 정의 된 메서드로 위임 된 클래스를 준비합니다. 차이점은 SimpleDelegator 또는 Delegator을 사용하는 경우 method_missing에 따라 다르므로 위임자에게 요청 된 메서드가없는 경우 method_missing을 통해 위임 된 개체로 프록시됩니다. DelegateClass으로 준비된 기본 클래스의 경우 위임 된 객체에 대해 동일한 메소드를 호출 할 이미 정의 된 메소드가 있습니다. 따라서 DelegateClass은보다 효율적인 위임 방법을 제공합니다.