Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
46
Task/Delegates/Elena/delegates-1.elena
Normal file
46
Task/Delegates/Elena/delegates-1.elena
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
import extensions;
|
||||
import system'routines;
|
||||
|
||||
interface IOperable
|
||||
{
|
||||
abstract operate() {}
|
||||
}
|
||||
|
||||
class Operable : IOperable
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
operate()
|
||||
= "delegate implementation";
|
||||
}
|
||||
|
||||
class Delegator
|
||||
{
|
||||
object theDelegate;
|
||||
|
||||
set Delegate(object)
|
||||
{
|
||||
theDelegate := object
|
||||
}
|
||||
|
||||
internal operate(operable)
|
||||
= "default implementation";
|
||||
|
||||
internal operate(IOperable operable)
|
||||
= operable.operate();
|
||||
|
||||
operate()
|
||||
<= operate(theDelegate);
|
||||
}
|
||||
|
||||
public program()
|
||||
{
|
||||
var delegator := new Delegator();
|
||||
|
||||
new object[]{nil, new Object(), new Operable()}.forEach:(o)
|
||||
{
|
||||
delegator.Delegate := o;
|
||||
|
||||
console.printLine(delegator.operate())
|
||||
}
|
||||
}
|
||||
47
Task/Delegates/Elena/delegates-2.elena
Normal file
47
Task/Delegates/Elena/delegates-2.elena
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
import extensions;
|
||||
import system'routines;
|
||||
|
||||
class Operable
|
||||
{
|
||||
Operable = self;
|
||||
|
||||
operate()
|
||||
= "delegate implementation";
|
||||
}
|
||||
|
||||
class Delegator
|
||||
{
|
||||
prop object Delegate;
|
||||
|
||||
constructor()
|
||||
{
|
||||
Delegate := nil
|
||||
}
|
||||
|
||||
operate()
|
||||
{
|
||||
// if the object does not support "get&operable" message - returns nil
|
||||
var operable := Delegate.Operable \ back:nil;
|
||||
|
||||
if (nil == operable)
|
||||
{
|
||||
^ "default implementation"
|
||||
}
|
||||
else
|
||||
{
|
||||
^ operable.operate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public program()
|
||||
{
|
||||
var delegator := new Delegator();
|
||||
|
||||
new object[]{nil, new Object(), new Operable()}.forEach:(o)
|
||||
{
|
||||
delegator.Delegate := o;
|
||||
|
||||
console.printLine(delegator.operate())
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue