Delegates: Difference between revisions

Content added Content deleted
No edit summary
(added ruby)
Line 381: Line 381:
self.delegate = None
self.delegate = None
def operation(self):
def operation(self):
if hasattr(self.delegate, 'thing'):
if hasattr(self.delegate, 'thing') and callable(self.delegate.thing):
return self.delegate.thing()
return self.delegate.thing()
return 'default implementation'
return 'default implementation'
Line 402: Line 402:
a.delegate = Delegate()
a.delegate = Delegate()
assert a.operation() == 'delegate implementation'</lang>
assert a.operation() == 'delegate implementation'</lang>

=={{header|Ruby}}==
<lang ruby>class Delegator
def initialize
@delegate = nil
end
def delegate
@delegate
end
def delegate=(x)
@delegate = x
end
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</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==