Ale*_*xey 29 ruby design-patterns delegation
可能我错过了一些简单的东西,但我不明白如何使用Ruby的DelegateClass
方法,我的意思是何时使用它而不是SimpleDelegator
类.例如,以下所有内容似乎大部分相同:
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]
Run Code Online (Sandbox Code Playgroud)
请注意,传递给哪个类似乎并不重要DelegateClass
.
jtz*_*ero 22
如果希望对象具有自己的行为并在其生命周期内委托给不同的对象,请使用子类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"
Run Code Online (Sandbox Code Playgroud)
这是另一个很好的解释a-delegate-matter
归档时间: |
|
查看次数: |
9576 次 |
最近记录: |