RosettaCodeData/Task/Delegates/Elena/delegates-1.elena

47 lines
709 B
Text
Raw Permalink Normal View History

2019-09-12 10:33:56 -07:00
import extensions;
import system'routines;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
interface IOperable
2017-09-23 10:01:46 +02:00
{
2019-09-12 10:33:56 -07:00
abstract operate() {}
2017-09-23 10:01:46 +02:00
}
2019-09-12 10:33:56 -07:00
class Operable : IOperable
2017-09-23 10:01:46 +02:00
{
2019-09-12 10:33:56 -07:00
constructor() {}
operate()
= "delegate implementation";
2017-09-23 10:01:46 +02:00
}
class Delegator
{
2019-09-12 10:33:56 -07:00
object theDelegate;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
set Delegate(object)
{
theDelegate := object
}
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
internal operate(operable)
= "default implementation";
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
internal operate(IOperable operable)
= operable.operate();
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
operate()
<= operate(theDelegate);
2017-09-23 10:01:46 +02:00
}
2019-09-12 10:33:56 -07:00
public program()
{
var delegator := new Delegator();
2017-09-23 10:01:46 +02:00
2020-02-17 23:21:07 -08:00
new::(nil, new Object(), new Operable()).forEach:(o)
2019-09-12 10:33:56 -07:00
{
delegator.Delegate := o;
2017-09-23 10:01:46 +02:00
2019-09-12 10:33:56 -07:00
console.printLine(delegator.operate())
}
}