unit Duck;
interface
type
IDUCK = interface
['{E38F898D-2EA0-4995-8F8C-1886752E6BFB}']
procedure quack;
procedure fly;
end;
type ITurkey = interface
['{FB98F4F2-2243-4450-AA5C-9114A2E088E5}']
procedure gobble;
procedure fly;
end;
implementation
end.
unit WildTurkey;
interface
uses Duck;
type
TWildTurkey = class(TInterfacedObject, ITurkey)
public
procedure gobble; {
System.out.println("Gobble gobble");
}
procedure fly; {
System.out.println("I'm flying a short distance");
}
end;
implementation
procedure TWildTurkey.gobble;
begin
writeln('Gobble gobble');
end;
procedure TWildTurkey.fly;
begin
writeln('I am flying a short distance');
end;
end.
program DuckTestDrive;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Duck in 'Duck.pas',
DuckAdapter in 'DuckAdapter.pas',
WildTurkey in 'WildTurkey.pas',
TurkeyAdapter in 'TurkeyAdapter.pas',
MallardDuck in 'MallardDuck.pas';
var
gDuck: TMallardDuck;
gTurkey : TWildTurkey;
gTurkeyAdapter: IDUCK;
gI: Integer;
procedure testDuck(aDuck: IDuck);
begin
aDuck.quack;
aDuck.fly;
end;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
gDuck := TMallardDuck.Create;
gTurkey := TWildTurkey.Create;
gTurkeyAdapter := TTurkeyAdapter.Create(gTurkey);
writeln('The Turkey says...');
gturkey.gobble();
gturkey.fly();
writeln(#10'The Duck says...');
testDuck(gduck);
writeln(#10'The TurkeyAdapter says...');
testDuck(gTurkeyAdapter);
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.