一、一个叫声接口和几只鸭子
- 从一个叫声接口开始。
- {《HeadFirst设计模式》Delphi代码之模式小结 }
- { 一个叫声接口 }
- { 编译工具:Delphi2010 for win32 }
- { E-Mail :guzh-0417@163.com }
- unit uQuackable;
- interface
- type
- IQuackable = interface(IInterface)
- procedure Quack;
- end;
- implementation
- end.
2、几只鸭子实现了该叫声接口。
1

2
{《HeadFirst设计模式》Delphi代码之模式小结 }3
{ 几只鸭子实现了声接口 }4
{ 编译工具:Delphi2010 for win32 }5
{ E-Mail :guzh-0417@163.com }6

7
unit uDuck;8

9
interface10

11
uses12
uQuackable;13

14
type15
TMallardDuck = class(TInterfacedObject, IQuackable)16
public17
procedure Quack;18
end;19

20
TRedHeadDuck = class(TInterfacedObject, IQuackable)21
public22
procedure Quack;23
end;24

25
TDuckCall = class(TInterfacedObject, IQuackable)26
public27
procedure Quack;28
end;29

30
TRubberDuck = class(TInterfacedObject, IQuackable)31
public32
procedure Quack;33
end;34

35
implementation36

37
{ TMallardDuck }38

39
procedure TMallardDuck.Quack;40
begin41
Writeln('Quack');42
end;43

44
{ TRedHeadDuck }45

46
procedure TRedHeadDuck.Quack;47
begin48
Writeln('Quack');49
end;50

51
{ TDuckCall }52

53
procedure TDuckCall.Quack;54
begin55
Writeln('Kwak');56
end;57

58
{ TRubberDuck }59

60
procedure TRubberDuck.Quack;61
begin62
Writeln('Squeak');63
end;64

65
end.
3、叫声接口为鸭鸣器提供服务。叫声接口与鸭鸣器的关系比与它的实现类更密切。
1

2
{《HeadFirst设计模式》Delphi代码之模式小结 }3
{ 鸭鸣模拟器 }4
{ 编译工具:Delphi2010 for win32 }5
{ E-Mail :guzh-0417@163.com }6

7
unit uDuckSimulator;8

9
interface10

11
uses12
uQuackable, uDuck;13

14
type15
TDuckSimulator = class(TObject)16
private17
procedure Simulate(aDuck: IQuackable); overload;18
public19
procedure Simulate; overload;20
end;21

22
implementation23

24
{ TDuckSimulator }25

26
procedure TDuckSimulator.Simulate(aDuck: IQuackable); { 此处交给多态处理 }27
begin28
aDuck.Quack;29
end;30

31
procedure TDuckSimulator.Simulate;32
var33
aMallardDuck: IQuackable;34
aRedHeadDuck: IQuackable;35
aDuckCall : IQuackable;36
aRubberDuck : IQuackable;37
begin38
try39
{ 创建鸭鸣实例 }40
aMallardDuck := TMallardDuck.Create;41
aRedHeadDuck := TRedHeadDuck.Create;42
aDuckCall := TDuckCall.Create;43
aRubberDuck := TRubberDuck.Create;44

45
Writeln('Duck Simulator');46

47
{ 模拟鸭鸣 }48
Simulate(aMallardDuck);49
Simulate(aRedHeadDuck);50
Simulate(aDuckCall);51
Simulate(aRubberDuck );52
finally53
aMallardDuck := nil;54
aRedHeadDuck := nil;55
aDuckCall := nil;56
aRubberDuck := nil;57
end;58
end;59

60
end.
4、客户端。
1

2
{《HeadFirst设计模式》Delphi代码之模式小结 }3
{ 客户端 }4
{ 编译工具:Delphi2010 for win32 }5
{ E-Mail :guzh-0417@163.com }6

7
program pDuckSimulator;8

9
{$APPTYPE CONSOLE}10

11
uses12
uDuck in 'uDuck.pas',13
uDuckSimulator in 'uDuckSimulator.pas',14
uQuackable in 'uQuackable.pas';15

16
var17
aSimulator: TDuckSimulator;18

19
begin20
aSimulator := TDuckSimulator.Create;21

22
aSimulator.Simulate;23

24
aSimulator.Free;25

26
Readln;27
end.
5、运行结果:
浙公网安备 33010602011771号