Có lẽ tôi đang thiếu một cái gì đó đơn giản, nhưng tôi không hiểu làm thế nào để sử dụng phương pháp DelegateClass
của Ruby, tôi có nghĩa là khi sử dụng nó thay vì SimpleDelegator
lớp. Ví dụ, tất cả những điều sau đây dường như làm việc chủ yếu là giống nhau:Khi nào nên sử dụng Ruby DelegateClass thay vì SimpleDelegator? (DelegateClass method so với SimpleDelegator class)
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]
Lưu ý rằng nó dường như không quan trọng mà lớp được truyền cho DelegateClass
.
Sau khi suy nghĩ về nó một thời gian, toàn bộ mẫu người ủy nhiệm vẻ với tôi như một bẩn hack nhanh :). Bạn gửi một tin nhắn, và bạn không biết lớp nào sẽ chịu trách nhiệm trả lời. Người ủy nhiệm đi qua tất cả các tin nhắn mà nó không nhận ra mà không biết liệu họ có được trả lời hay không (nếu không nó có thể được nhận ra như một phân lớp, hoặc sử dụng bố cục, phải không?). Lớp học ban đầu không thực sự kiểm soát bất cứ điều gì nữa và thậm chí không biết có một đại biểu giữa nó và phần còn lại của thế giới. – Alexey