如果您想要一个对象既具有自己的行为又在其生命周期内委托给不同的对象时,请使用子类 SimpleDelegator。
本质上说,当您创建的类不会获得不同的对象时,请使用 DelegateClass。
Ruby 中的TempFile只是用来装饰一个 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