Delegates: Difference between revisions
Content added Content deleted
Line 1,585: | Line 1,585: | ||
default implementation |
default implementation |
||
delegate implementation</pre> |
delegate implementation</pre> |
||
=={{header|Objeck}}== |
|||
{{trans|Java}} |
|||
<lang objeck>interface Thingable { |
|||
method : virtual : public : Thing() ~ String; |
|||
} |
|||
class Delegator { |
|||
@delegate : Thingable; |
|||
New() { |
|||
} |
|||
method : public : SetDelegate(delegate : Thingable) ~ Nil { |
|||
@delegate := delegate; |
|||
} |
|||
method : public : Operation() ~ String { |
|||
if(@delegate = Nil) { |
|||
return "default implementation"; |
|||
} |
|||
else { |
|||
return @delegate->Thing(); |
|||
}; |
|||
} |
|||
} |
|||
class Delegate implements Thingable { |
|||
New() { |
|||
} |
|||
method : public : Thing() ~ String { |
|||
return "delegate implementation"; |
|||
} |
|||
} |
|||
class Example { |
|||
function : Main(args : String[]) ~ Nil { |
|||
# Without a delegate: |
|||
a := Delegator->New(); |
|||
Runtime->Assert(a->Operation()->Equals("default implementation")); |
|||
# With a delegate: |
|||
d := Delegate->New(); |
|||
a->SetDelegate(d); |
|||
Runtime->Assert(a->Operation()->Equals("delegate implementation")); |
|||
# Same as the above, but with an anonymous class: |
|||
a->SetDelegate(Base->New() implements Thingable { |
|||
New() {} |
|||
method : public : Thing() ~ String { |
|||
return "anonymous delegate implementation"; |
|||
} |
|||
}); |
|||
Runtime->Assert(a->Operation()->Equals("anonymous delegate implementation")); |
|||
} |
|||
} |
|||
</lang> |
|||
=={{header|Objective-C}}== |
=={{header|Objective-C}}== |
||
Line 1,715: | Line 1,775: | ||
return 0; |
return 0; |
||
}</lang> |
}</lang> |
||
=={{header|Oforth}}== |
=={{header|Oforth}}== |