Delegates: Difference between revisions
Content deleted Content added
Line 754:
=={{header|Elena}}==
ELENA 3.
Using multi methods:
<lang elena>import extensions.
import system'routines.
{
abstract operate []
[▼
]▼
}
class Operable :: IOperable
{
constructor new []▼
operate
= "delegate implementation".
Line 777 ⟶ 776:
{
object theDelegate.
▲ constructor new
[
[▼
];▼
[▼
]▼
]
▲ set Delegate:obj
▲ [
▲ [ theDelegate := obj. ].
▲ ]
▲ operate(Object operable)
= "default implementation".
private operate(IOperable operable)
= operable operate.
operate
<= operate(theDelegate).
}
[
var delegator := Delegator new.
Line 810 ⟶ 808:
console printLine(delegator operate).
].
]
Generic solution:
<lang elena>import extensions.
import system'routines.
class Operable
{
operable =
operate
Line 826 ⟶ 823:
class Delegator
{
object prop Delegate :: theDelegate.
constructor new
[
theDelegate := nil.
▲ ]
▲ [ theDelegate := obj. ].
]
Line 843 ⟶ 833:
[
// if the object does not support "get&operable" message - returns nil
var anOperable := theDelegate operable \ back:
if (
[
^ "default implementation".
Line 855 ⟶ 845:
}
public program
[
var delegator := Delegator new.
Line 865 ⟶ 855:
console printLine(delegator operate).
].
]
{{out}}
<pre>
|