标签:des style blog http io ar os for sp

{《HeadFirst设计模式》工厂模式之工厂方法 }
{ 产品类 }
{ 编译工具 :Delphi2007 for win32 }
{ 联系方式 :guzh-0417@163.com }
unit uProducts;
interface
type
{ abstract Pizza }
TPizza = class abstract(TObject)
strict private
function GetName: string;
strict protected
FName : string;
FDough: string;
FSauce: string;
public
procedure Prepare;
procedure Bake;
procedure Cut; virtual;
procedure Box;
property Name: string read GetName;
end;
{ NY Style Pizza }
TNYStyleCheesePizza = class(TPizza)
public
constructor Create;
end;
TNYStyleClamPizza = class(TPizza)
public
constructor Create;
end;
TNYStylePepperoniPizza = class(TPizza)
public
constructor Create;
end;
TNYStyleVeggiePizza = class(TPizza)
public
constructor Create;
end;
{ Chicago Style Pizza }
TChicagoStyleCheesePizza = class(TPizza)
public
constructor Create;
procedure Cut; override;
end;
TChicagoStyleClamPizza = class(TPizza)
public
constructor Create;
procedure Cut; override;
end;
TChicagoStylePepperoniPizza = class(TPizza)
public
constructor Create;
procedure Cut; override;
end;
TChicagoStyleVeggiePizza = class(TPizza)
public
constructor Create;
procedure Cut; override;
end;
implementation
{ TPizza }
procedure TPizza.Bake;
begin
Writeln(‘Bake for 25 minutes at 350‘);
end;
procedure TPizza.Box;
begin
Writeln(‘Place pizza in official PizzaStore box‘);
end;
procedure TPizza.Cut;
begin
Writeln(‘Cutting the pizza into diaginal slices‘);
end;
function TPizza.GetName: string;
begin
Result := FName;
end;
procedure TPizza.Prepare;
begin
Writeln(‘Preparing ‘ + FName);
Writeln(‘Tossing dough
‘);
Writeln(‘Adding sauce
‘);
Writeln(‘Adding topping:‘);
end;
{ TNYStyleCheesePizza }
constructor TNYStyleCheesePizza.Create;
begin
FName := ‘NY Style Sauce and Cheese Pizza‘;
FDough := ‘Thin Crust Dough‘;
FSauce := ‘Marinara Sauce‘;
end;
{ TNYStyleClamPizza }
constructor TNYStyleClamPizza.Create;
begin
FName := ‘NY Style Clam Pizza‘;
FDough := ‘Thin Crust Dough‘;
FSauce := ‘Marinara Sauce‘;
end;
{ TNYStylePepperoniPizza }
constructor TNYStylePepperoniPizza.Create;
begin
FName := ‘NY Style Pepperoni Pizza‘;
FDough := ‘Thin Crust Dough‘;
FSauce := ‘Marinara Sauce‘;
end;
{ TNYStyleVeggieizza }
constructor TNYStyleVeggiePizza.Create;
begin
FName := ‘NY Style Veggie Pizza‘;
FDough := ‘Thin Crust Dough‘;
FSauce := ‘Marinara Sauce‘;
end;
{ TChicagoStyleCheesePizza }
constructor TChicagoStyleCheesePizza.Create;
begin
FName := ‘Chicago Style Deep Dish Cheese Pizza‘;
FDough := ‘Extra Thick Crust Dough‘;
FSauce := ‘Plum Tomato Sauce‘;
end;
procedure TChicagoStyleCheesePizza.Cut;
begin
Writeln(‘Cutting the pizza into square slices‘);
end;
{ TChicagoStyleClamPizza }
constructor TChicagoStyleClamPizza.Create;
begin
FName := ‘Chicago Style Clam Pizza‘;
FDough := ‘Extra Thick Crust Dough‘;
FSauce := ‘Plum Tomato Sauce‘;
end;
procedure TChicagoStyleClamPizza.Cut;
begin
Writeln(‘Cutting the pizza into square slices‘);
end;
{ TChicagoStylePepperoniPizza }
constructor TChicagoStylePepperoniPizza.Create;
begin
FName := ‘Chicago Style Pepperoni Pizza‘;
FDough := ‘Extra Thick Crust Dough‘;
FSauce := ‘Plum Tomato Sauce‘;
end;
procedure TChicagoStylePepperoniPizza.Cut;
begin
Writeln(‘Cutting the pizza into square slices‘);
end;
{ TChicagoStyleVeggiePizza }
constructor TChicagoStyleVeggiePizza.Create;
begin
FName := ‘Chicago Style Veggie Pizza‘;
FDough := ‘Extra Thick Crust Dough‘;
FSauce := ‘Plum Tomato Sauce‘;
end;
procedure TChicagoStyleVeggiePizza.Cut;
begin
Writeln(‘Cutting the pizza into square slices‘);
end;
end.

{《HeadFirst设计模式》工厂模式之工厂方法 }
{ 工厂类 }
{ 编译工具 :Delphi2007 for win32 }
{ 联系方式 :guzh-0417@163.com }
unit uFactory;
interface
uses
uProducts;
type
TPizzaStore = class abstract(TObject)
strict protected
FPizza: TPizza;
public
function OrderPizza (Category: Integer): TPizza;
function CreatePizza(Category: Integer): TPizza; virtual; abstract;
end;
TNYPizzaStore = class(TPizzaStore)
public
function CreatePizza(Category: Integer): TPizza; override;
destructor Destroy; override;
end;
TChicagoPizzaStore = class(TPizzaStore)
public
function CreatePizza(Category: Integer): TPizza; override;
destructor Destroy; override;
end;
implementation
{ TPizzaStore }
function TPizzaStore.OrderPizza(Category: Integer): TPizza;
begin
FPizza := CreatePizza(Category);
FPizza.Prepare;
FPizza.Bake;
FPizza.Cut;
FPizza.Box;
Result := FPizza;
end;
{ TNYPizzaStore }
function TNYPizzaStore.CreatePizza(Category: Integer): TPizza;
begin
case Category of
0: Result := TNYStyleCheesePizza.Create;
1: Result := TNYStyleClamPizza.Create;
2: Result := TNyStylePepperoniPizza.Create;
3: Result := TNYStyleVeggiePizza.Create;
else
Result := nil;
end;
end;
destructor TNYPizzaStore.Destroy;
begin
FPizza.Free;
inherited Destroy;
end;
{ TChicagoPizzaStore }
function TChicagoPizzaStore.CreatePizza(Category: Integer): TPizza;
begin
case Category of
0: Result := TChicagoStyleCheesePizza.Create;
1: Result := TChicagoStyleClamPizza.Create;
2: Result := TChicagoStylePepperoniPizza.Create;
3: Result := TChicagoStyleVeggiePizza.Create;
else
Result := nil;
end;
end;
destructor TChicagoPizzaStore.Destroy;
begin
FPizza.Free;
inherited Destroy;
end;
end.

{《HeadFirst设计模式》工厂模式之工厂方法 }
{ 客户端 }
{ 编译工具 :Delphi2007 for win32 }
{ 联系方式 :guzh-0417@163.com }
program pPizzaStoreTest;
{$APPTYPE CONSOLE}
uses
uFactory in ‘uFactory.pas‘,
uProducts in ‘uProducts.pas‘;
var
aNYStore: TPizzaStore;
aChicagoStore: TPizzaStore;
aPizza: TPizza;
begin
aNYStore := TNYPizzaStore.Create;
aPizza := aNYStore.OrderPizza(0);
Writeln(‘Ethan ordered a ‘ + aPizza.Name);
aNYStore.Free;
Writeln;
aChicagoStore := TChicagoPizzaStore.Create;
aPizza := aChicagoStore.OrderPizza(0);
Writeln(‘Joel ordered a ‘ + aPizza.Name);
aChicagoStore.Free;
Readln;
end.

Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]
标签:des style blog http io ar os for sp
原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076344.html