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