32 lines
672 B
Ruby
32 lines
672 B
Ruby
class Delegator
|
|
attr_accessor :delegate
|
|
def operation
|
|
if @delegate.respond_to?(:thing)
|
|
@delegate.thing
|
|
else
|
|
'default implementation'
|
|
end
|
|
end
|
|
end
|
|
|
|
class Delegate
|
|
def thing
|
|
'delegate implementation'
|
|
end
|
|
end
|
|
|
|
if __FILE__ == $PROGRAM_NAME
|
|
|
|
# No delegate
|
|
a = Delegator.new
|
|
puts a.operation # prints "default implementation"
|
|
|
|
# With a delegate that does not implement "thing"
|
|
a.delegate = 'A delegate may be any object'
|
|
puts a.operation # prints "default implementation"
|
|
|
|
# With delegate that implements "thing"
|
|
a.delegate = Delegate.new
|
|
puts a.operation # prints "delegate implementation"
|
|
end
|