Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]
2020-12-13 15:38
标签:des style blog http io ar os for sp Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转] 标签:des style blog http io ar os for sp 原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076344.html![]()
1
2
{《HeadFirst设计模式》工厂模式之工厂方法 }
3
{ 产品类 }
4
{ 编译工具 :Delphi2007 for win32 }
5
{ 联系方式 :guzh-0417@163.com }
6
7
unit uProducts;
8
9
interface
10
11
type
12
{ abstract Pizza }
13
14
TPizza = class abstract(TObject)
15
strict private
16
function GetName: string;
17
strict protected
18
FName : string;
19
FDough: string;
20
FSauce: string;
21
public
22
procedure Prepare;
23
procedure Bake;
24
procedure Cut; virtual;
25
procedure Box;
26
property Name: string read GetName;
27
end;
28
29
{ NY Style Pizza }
30
31
TNYStyleCheesePizza = class(TPizza)
32
public
33
constructor Create;
34
end;
35
36
TNYStyleClamPizza = class(TPizza)
37
public
38
constructor Create;
39
end;
40
41
TNYStylePepperoniPizza = class(TPizza)
42
public
43
constructor Create;
44
end;
45
46
TNYStyleVeggiePizza = class(TPizza)
47
public
48
constructor Create;
49
end;
50
51
{ Chicago Style Pizza }
52
53
TChicagoStyleCheesePizza = class(TPizza)
54
public
55
constructor Create;
56
procedure Cut; override;
57
end;
58
59
TChicagoStyleClamPizza = class(TPizza)
60
public
61
constructor Create;
62
procedure Cut; override;
63
end;
64
65
TChicagoStylePepperoniPizza = class(TPizza)
66
public
67
constructor Create;
68
procedure Cut; override;
69
end;
70
71
TChicagoStyleVeggiePizza = class(TPizza)
72
public
73
constructor Create;
74
procedure Cut; override;
75
end;
76
77
implementation
78
79
{ TPizza }
80
81
procedure TPizza.Bake;
82
begin
83
Writeln(‘Bake for 25 minutes at 350‘);
84
end;
85
86
procedure TPizza.Box;
87
begin
88
Writeln(‘Place pizza in official PizzaStore box‘);
89
end;
90
91
procedure TPizza.Cut;
92
begin
93
Writeln(‘Cutting the pizza into diaginal slices‘);
94
end;
95
96
function TPizza.GetName: string;
97
begin
98
Result := FName;
99
end;
100
101
procedure TPizza.Prepare;
102
begin
103
Writeln(‘Preparing ‘ + FName);
104
Writeln(‘Tossing dough
‘);
105
Writeln(‘Adding sauce
‘);
106
Writeln(‘Adding topping:‘);
107
end;
108
109
{ TNYStyleCheesePizza }
110
111
constructor TNYStyleCheesePizza.Create;
112
begin
113
FName := ‘NY Style Sauce and Cheese Pizza‘;
114
FDough := ‘Thin Crust Dough‘;
115
FSauce := ‘Marinara Sauce‘;
116
end;
117
118
{ TNYStyleClamPizza }
119
120
constructor TNYStyleClamPizza.Create;
121
begin
122
FName := ‘NY Style Clam Pizza‘;
123
FDough := ‘Thin Crust Dough‘;
124
FSauce := ‘Marinara Sauce‘;
125
end;
126
127
{ TNYStylePepperoniPizza }
128
129
constructor TNYStylePepperoniPizza.Create;
130
begin
131
FName := ‘NY Style Pepperoni Pizza‘;
132
FDough := ‘Thin Crust Dough‘;
133
FSauce := ‘Marinara Sauce‘;
134
end;
135
136
{ TNYStyleVeggieizza }
137
138
constructor TNYStyleVeggiePizza.Create;
139
begin
140
FName := ‘NY Style Veggie Pizza‘;
141
FDough := ‘Thin Crust Dough‘;
142
FSauce := ‘Marinara Sauce‘;
143
end;
144
145
{ TChicagoStyleCheesePizza }
146
147
constructor TChicagoStyleCheesePizza.Create;
148
begin
149
FName := ‘Chicago Style Deep Dish Cheese Pizza‘;
150
FDough := ‘Extra Thick Crust Dough‘;
151
FSauce := ‘Plum Tomato Sauce‘;
152
end;
153
154
procedure TChicagoStyleCheesePizza.Cut;
155
begin
156
Writeln(‘Cutting the pizza into square slices‘);
157
end;
158
159
{ TChicagoStyleClamPizza }
160
161
constructor TChicagoStyleClamPizza.Create;
162
begin
163
FName := ‘Chicago Style Clam Pizza‘;
164
FDough := ‘Extra Thick Crust Dough‘;
165
FSauce := ‘Plum Tomato Sauce‘;
166
end;
167
168
procedure TChicagoStyleClamPizza.Cut;
169
begin
170
Writeln(‘Cutting the pizza into square slices‘);
171
end;
172
173
{ TChicagoStylePepperoniPizza }
174
175
constructor TChicagoStylePepperoniPizza.Create;
176
begin
177
FName := ‘Chicago Style Pepperoni Pizza‘;
178
FDough := ‘Extra Thick Crust Dough‘;
179
FSauce := ‘Plum Tomato Sauce‘;
180
end;
181
182
procedure TChicagoStylePepperoniPizza.Cut;
183
begin
184
Writeln(‘Cutting the pizza into square slices‘);
185
end;
186
187
{ TChicagoStyleVeggiePizza }
188
189
constructor TChicagoStyleVeggiePizza.Create;
190
begin
191
FName := ‘Chicago Style Veggie Pizza‘;
192
FDough := ‘Extra Thick Crust Dough‘;
193
FSauce := ‘Plum Tomato Sauce‘;
194
end;
195
196
procedure TChicagoStyleVeggiePizza.Cut;
197
begin
198
Writeln(‘Cutting the pizza into square slices‘);
199
end;
200
201
end.
202
![]()
1
2
{《HeadFirst设计模式》工厂模式之工厂方法 }
3
{ 工厂类 }
4
{ 编译工具 :Delphi2007 for win32 }
5
{ 联系方式 :guzh-0417@163.com }
6
7
unit uFactory;
8
9
interface
10
11
uses
12
uProducts;
13
14
type
15
TPizzaStore = class abstract(TObject)
16
strict protected
17
FPizza: TPizza;
18
public
19
function OrderPizza (Category: Integer): TPizza;
20
function CreatePizza(Category: Integer): TPizza; virtual; abstract;
21
end;
22
23
TNYPizzaStore = class(TPizzaStore)
24
public
25
function CreatePizza(Category: Integer): TPizza; override;
26
destructor Destroy; override;
27
end;
28
29
TChicagoPizzaStore = class(TPizzaStore)
30
public
31
function CreatePizza(Category: Integer): TPizza; override;
32
destructor Destroy; override;
33
end;
34
35
implementation
36
37
{ TPizzaStore }
38
39
function TPizzaStore.OrderPizza(Category: Integer): TPizza;
40
begin
41
FPizza := CreatePizza(Category);
42
43
FPizza.Prepare;
44
FPizza.Bake;
45
FPizza.Cut;
46
FPizza.Box;
47
48
Result := FPizza;
49
end;
50
51
{ TNYPizzaStore }
52
53
function TNYPizzaStore.CreatePizza(Category: Integer): TPizza;
54
begin
55
case Category of
56
0: Result := TNYStyleCheesePizza.Create;
57
1: Result := TNYStyleClamPizza.Create;
58
2: Result := TNyStylePepperoniPizza.Create;
59
3: Result := TNYStyleVeggiePizza.Create;
60
else
61
Result := nil;
62
end;
63
end;
64
65
destructor TNYPizzaStore.Destroy;
66
begin
67
FPizza.Free;
68
inherited Destroy;
69
end;
70
71
{ TChicagoPizzaStore }
72
73
function TChicagoPizzaStore.CreatePizza(Category: Integer): TPizza;
74
begin
75
case Category of
76
0: Result := TChicagoStyleCheesePizza.Create;
77
1: Result := TChicagoStyleClamPizza.Create;
78
2: Result := TChicagoStylePepperoniPizza.Create;
79
3: Result := TChicagoStyleVeggiePizza.Create;
80
else
81
Result := nil;
82
end;
83
end;
84
85
destructor TChicagoPizzaStore.Destroy;
86
begin
87
FPizza.Free;
88
inherited Destroy;
89
end;
90
91
end.
92
![]()
1
2
{《HeadFirst设计模式》工厂模式之工厂方法 }
3
{ 客户端 }
4
{ 编译工具 :Delphi2007 for win32 }
5
{ 联系方式 :guzh-0417@163.com }
6
7
program pPizzaStoreTest;
8
9
{$APPTYPE CONSOLE}
10
11
uses
12
uFactory in ‘uFactory.pas‘,
13
uProducts in ‘uProducts.pas‘;
14
15
var
16
aNYStore: TPizzaStore;
17
aChicagoStore: TPizzaStore;
18
aPizza: TPizza;
19
20
begin
21
aNYStore := TNYPizzaStore.Create;
22
aPizza := aNYStore.OrderPizza(0);
23
Writeln(‘Ethan ordered a ‘ + aPizza.Name);
24
aNYStore.Free;
25
26
Writeln;
27
28
aChicagoStore := TChicagoPizzaStore.Create;
29
aPizza := aChicagoStore.OrderPizza(0);
30
Writeln(‘Joel ordered a ‘ + aPizza.Name);
31
aChicagoStore.Free;
32
33
Readln;
34
end.
35
运行结果:
文章标题:Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]
文章链接:http://soscw.com/essay/35310.html