Delegates: Difference between revisions

Content deleted Content added
Io: added output
Line 724: Line 724:


=={{header|Elena}}==
=={{header|Elena}}==
ELENA 3.x :
<lang elena>#import system.
#import system'routines.
<lang elena>#import system'routines.

#class Operable
dispatchable(delegate) class Operable
{
{
operate
#method cast:verb &to:target
= target::verb eval &delegate:$self.
#method operate
= "delegate implementation".
= "delegate implementation".
}
}


#class Delegator
class Delegator
{
{
#field theDelegate.
object theDelegate.
#constructor new
constructor new
[
[
theDelegate := nil.
theDelegate := nil.
]
]
#method set &Delegate:obj
set &Delegate:obj
[
[
($nil == obj)
($nil == obj)
Line 751: Line 748:
! [ theDelegate := obj. ].
! [ theDelegate := obj. ].
]
]
#method operate
operate
= theDelegate cast:%eval &to:
= theDelegate cast:%eval &to:
{
{
delegate : o = o operate.
delegate : o = o operate.
! : o = "default implementation".
! o = "default implementation".
}.
}.
}
}

#symbol program =
program =
[
[
#var delegator := Delegator new.
var delegator := Delegator new.

($nil, Object new, Operable new) run &each: o
($nil, Object new, Operable new) run &each: o
[
[
delegator set &Delegate:o.
delegator set &Delegate:o.

console writeLine:(delegator operate).
console writeLine:(delegator operate).
].
].