Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator[转]
2020-12-13 15:44
标签:des blog http io ar os for sp div 运行结果: Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator[转] 标签:des blog http io ar os for sp div 原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076282.html![]()
1
2
{《HeadFirst设计模式》之策略模式 }
3
{ 本单元中的类为策略类 }
4
{ 编译工具: Delphi7.0 }
5
{ E-Mail : guzh-0417@163.com }
6
7
unit uStrategy;
8
9
interface
10
11
type
12
{飞行接口,及其实现类 }
13
14
IFlyBehavior = Interface(IInterface)
15
procedure Fly;
16
end;
17
18
TFlyWithWings = class(TInterfacedObject, IFlyBehavior)
19
public
20
procedure Fly;
21
end;
22
23
TFlyNoWay = class(TInterfacedObject, IFlyBehavior)
24
public
25
procedure Fly;
26
end;
27
28
TFlyRocketPowered = class(TInterfacedObject, IFlyBehavior)
29
public
30
procedure Fly;
31
end;
32
33
{叫声接口,及其实现类}
34
35
IQuackBehavior = Interface(IInterface)
36
procedure Quack;
37
end;
38
39
TQuack = class(TInterfacedObject, IQuackBehavior)
40
public
41
procedure Quack;
42
end;
43
44
TMuteQuack = class(TInterfacedObject, IQuackBehavior)
45
public
46
procedure Quack;
47
end;
48
49
TSqueak = class(TInterfacedObject, IQuackBehavior)
50
public
51
procedure Quack;
52
end;
53
54
implementation
55
56
{ TFlyWithWings }
57
58
procedure TFlyWithWings.Fly;
59
begin
60
Writeln(‘I am flying!‘);
61
end;
62
63
{ TFlyNoWay }
64
65
procedure TFlyNoWay.Fly;
66
begin
67
Writeln(‘I can not fly!‘);
68
end;
69
70
{ TFlyRocketPowered }
71
72
procedure TFlyRocketPowered.Fly;
73
begin
74
Writeln(‘I am flying with a rocket!‘);
75
end;
76
77
{ TQuack }
78
79
procedure TQuack.Quack;
80
begin
81
Writeln(‘Quack‘);
82
end;
83
84
{ TMuteQuack }
85
86
procedure TMuteQuack.Quack;
87
begin
88
Writeln(‘
89
end;
90
91
{ TSqueak }
92
93
procedure TSqueak.Quack;
94
begin
95
Writeln(‘Squeak‘);
96
end;
97
98
end.![]()
1
2
{《HeadFirst设计模式》之策略模式 }
3
{ 本单元中的类为策略的用户, }
4
{ 一般策略模式中的上下文接口已包含在用户类中。}
5
{ 编译工具: Delphi7.0 }
6
{ E-Mail : guzh-0417@163.com }
7
8
unit uDuck;
9
10
interface
11
12
uses
13
uStrategy;
14
15
type
16
{ 鸭子抽象类 }
17
18
TDuck = class(TObject)
19
protected
20
FFlyBehavior : IFlyBehavior;
21
FQuackBehavior: IQuackBehavior;
22
public
23
procedure Display; virtual; abstract;
24
procedure PerformFly;
25
procedure PerformQuack;
26
procedure Swim;
27
procedure SetFlyBehavior(FlyBehavior: IFlyBehavior);
28
procedure SetQuackBehavior(QuackBehavior: IQuackBehavior);
29
end;
30
31
{ 绿头鸭具体类 }
32
33
TMallardDuck = class(TDuck)
34
public
35
constructor Create;
36
destructor Destroy; override;
37
procedure Display; override;
38
end;
39
40
{ 模型鸭具体类 }
41
42
TModelDuck = class(TDuck)
43
public
44
constructor Create;
45
destructor Destroy; override;
46
procedure Display; override;
47
end;
48
49
implementation
50
51
{ TDuck }
52
53
procedure TDuck.PerformFly;
54
begin
55
FFlyBehavior.Fly;
56
end;
57
58
procedure TDuck.PerformQuack;
59
begin
60
FQuackBehavior.Quack;
61
end;
62
63
procedure TDuck.SetFlyBehavior(FlyBehavior: IFlyBehavior);
64
begin
65
FFlyBehavior := FlyBehavior;
66
end;
67
68
procedure TDuck.SetQuackBehavior(QuackBehavior: IQuackBehavior);
69
begin
70
FQuackBehavior := QuackBehavior;
71
end;
72
73
procedure TDuck.Swim;
74
begin
75
Writeln(‘All ducks float, even decoys!‘);
76
end;
77
78
{ TMallardDuck }
79
80
constructor TMallardDuck.Create;
81
begin
82
FQuackBehavior := TQuack.Create;
83
FFlyBehavior := TFlyWithWings.Create;
84
end;
85
86
destructor TMallardDuck.Destroy;
87
begin
88
FQuackBehavior := nil;
89
FFlyBehavior := nil;
90
inherited;
91
end;
92
93
procedure TMallardDuck.Display;
94
begin
95
Writeln(‘I am a real mallard duck‘);
96
end;
97
98
{ TModelDuck }
99
100
constructor TModelDuck.Create;
101
begin
102
FFlyBehavior := TFlyNoWay.Create;
103
FQuackBehavior := TQuack.Create;
104
end;
105
106
destructor TModelDuck.Destroy;
107
begin
108
FQuackBehavior := nil;
109
FFlyBehavior := nil;
110
inherited;
111
end;
112
113
procedure TModelDuck.Display;
114
begin
115
Writeln(‘I am a model duck‘);
116
end;
117
118
end.
119
![]()
1
2
{《HeadFirst设计模式》之策略模式 }
3
{ 客户端 }
4
{ 编译工具: Delphi7.0 }
5
{ E-Mail : guzh-0417@163.com }
6
7
program pMiniDuckSimulator;
8
9
{$APPTYPE CONSOLE}
10
11
uses
12
SysUtils,
13
uDuck in ‘uDuck.pas‘,
14
uStrategy in ‘uStrategy.pas‘;
15
16
var
17
Mallard: TDuck;
18
Model : TDuck;
19
FlyRocketPowered: IFlyBehavior;
20
21
begin
22
Mallard := TMallardDuck.Create;
23
Mallard.PerformQuack;
24
Mallard.PerformFly;
25
FreeAndNil(Mallard);
26
27
Model := TModelDuck.Create;
28
Model.PerformFly;
29
30
FlyRocketPowered := TFlyRocketPowered.Create;
31
Model.SetFlyBehavior(FlyRocketPowered);
32
Model.PerformFly;
33
FlyRocketPowered := nil;
34
FreeAndNil(Model);
35
36
Readln;
37
end.

文章标题:Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator[转]
文章链接:http://soscw.com/index.php/essay/35367.html