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
은보다 효율적인 위임 방법을 제공합니다.