ruby design-patterns delegation

¿Cuándo usar Ruby DelegateClass en lugar de SimpleDelegator?(Método DelegateClass vs. clase SimpleDelegator)



design-patterns delegation (1)

Probablemente me esté perdiendo algo simple, pero no entiendo cómo usar el método DelegateClass de Ruby, quiero decir cuándo usarlo en lugar de la clase SimpleDelegator . Por ejemplo, todo lo siguiente parece funcionar de manera casi idéntica:

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]

Tenga en cuenta que no parece importar qué clase se pasa a DelegateClass .


Use la subclase SimpleDelegator cuando desee un objeto que tenga su propio comportamiento y delegue en diferentes objetos durante su vida útil.

Esencialmente, decir usar DelegateClass cuando la clase que estás creando no va a obtener un objeto diferente. TempFile en Ruby solo va a decorar un objeto File SimpleDelegator puede ser reutilizado en diferentes objetos.

Example:

require ''delegate'' class TicketSeller def sellTicket() ''Here is a ticket'' end end class NoTicketSeller def sellTicket() ''Sorry-come back tomorrow'' end end class TicketOffice < SimpleDelegator def initialize @seller = TicketSeller.new @noseller = NoTicketSeller.new super(@seller) end def allowSales(allow = true) __setobj__(allow ? @seller : @noseller) allow end end to = TicketOffice.new to.sellTicket » "Here is a ticket" to.allowSales(false) » false to.sellTicket » "Sorry-come back tomorrow" to.allowSales(true) » true to.sellTicket » "Here is a ticket"

Aquí hay otra buena explicación a-delegate-matter