Ответ 1
Использовать подкласс SimpleDelegator, если вы хотите, чтобы объект имел свое поведение и делегировал разные объекты в течение его жизни.
По сути говоря, использование DelegateClass, когда класс, который вы создаете, не будет получать другой объект. TempFile в Ruby будет только украшать объект File SimpleDelegator может быть повторно использован для разных объектов.
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"
Вот еще одно хорошее объяснение a-delegate-matter