码迷,mamicode.com
首页 > Windows程序 > 详细

Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]

时间:2014-11-05 17:02:18      阅读:385      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣
 1bubuko.com,布布扣
 2bubuko.com,布布扣 {《HeadFirst设计模式》工厂模式之抽象工厂 }
 3bubuko.com,布布扣 { 抽象工厂的产品                       }
 4bubuko.com,布布扣 { 编译工具:Delphi7.0                  }
 5bubuko.com,布布扣 { E-Mail :guzh-0417@163.com          }
 6bubuko.com,布布扣
 7bubuko.com,布布扣unit uPizzaIngredient;
 8bubuko.com,布布扣
 9bubuko.com,布布扣interface
10bubuko.com,布布扣
11bubuko.com,布布扣type
12bubuko.com,布布扣  TDough = class(TObject)
13bubuko.com,布布扣  end;
14bubuko.com,布布扣
15bubuko.com,布布扣  TThinCrustDough = class(TDough)
16bubuko.com,布布扣  end;
17bubuko.com,布布扣
18bubuko.com,布布扣  TThickCrustDough = class(TDough)
19bubuko.com,布布扣  end;
20bubuko.com,布布扣
21bubuko.com,布布扣  ////////////////////////////////
22bubuko.com,布布扣
23bubuko.com,布布扣  TSauce = class(TObject)
24bubuko.com,布布扣  end;
25bubuko.com,布布扣
26bubuko.com,布布扣  TMarinaraSauce = class(TSauce)
27bubuko.com,布布扣  end;
28bubuko.com,布布扣
29bubuko.com,布布扣  TPlumTomatoSauce = class(TSauce)
30bubuko.com,布布扣  end;
31bubuko.com,布布扣
32bubuko.com,布布扣  ////////////////////////////////
33bubuko.com,布布扣
34bubuko.com,布布扣  TCheese = class(TObject)
35bubuko.com,布布扣  end;
36bubuko.com,布布扣
37bubuko.com,布布扣  TReggianoCheese = class(TCheese)
38bubuko.com,布布扣  end;
39bubuko.com,布布扣
40bubuko.com,布布扣  TMozzarellaCheese = class(TCheese)
41bubuko.com,布布扣  end;
42bubuko.com,布布扣
43bubuko.com,布布扣  //////////////////////////////////
44bubuko.com,布布扣
45bubuko.com,布布扣  TPepperoni = class(TObject)
46bubuko.com,布布扣  end;
47bubuko.com,布布扣
48bubuko.com,布布扣  TSlicedPepperoni = class(TPepperoni)
49bubuko.com,布布扣  end;
50bubuko.com,布布扣
51bubuko.com,布布扣  ////////////////////////////////////
52bubuko.com,布布扣  
53bubuko.com,布布扣  TClams = class(TObject)
54bubuko.com,布布扣  end;
55bubuko.com,布布扣
56bubuko.com,布布扣  TFreshClams = class(TClams)
57bubuko.com,布布扣  end;
58bubuko.com,布布扣
59bubuko.com,布布扣  TFrozenClams = class(TClams)
60bubuko.com,布布扣  end;
61bubuko.com,布布扣
62bubuko.com,布布扣implementation
63bubuko.com,布布扣
64bubuko.com,布布扣end.

bubuko.com,布布扣
 1bubuko.com,布布扣
 2bubuko.com,布布扣 {《HeadFirst设计模式》工厂模式之抽象工厂 }
 3bubuko.com,布布扣 { 抽象工厂                            }
 4bubuko.com,布布扣 { 编译工具:Delphi7.0                 }
 5bubuko.com,布布扣 { E-Mail :guzh-0417@163.com         }
 6bubuko.com,布布扣
 7bubuko.com,布布扣unit uPizzaIngredientFactory;
 8bubuko.com,布布扣
 9bubuko.com,布布扣interface
10bubuko.com,布布扣
11bubuko.com,布布扣uses
12bubuko.com,布布扣  uPizzaIngredient;
13bubuko.com,布布扣
14bubuko.com,布布扣type
15bubuko.com,布布扣  TPizzaIngredientFactory = class(TObject)
16bubuko.com,布布扣  public
17bubuko.com,布布扣    function CreateDough: TDough; virtual; abstract;
18bubuko.com,布布扣    function CreateSauce: TSauce; virtual; abstract;
19bubuko.com,布布扣    function CreateCheese: TCheese; virtual; abstract;
20bubuko.com,布布扣    function CreatePepperoni: TPepperoni; virtual; abstract;
21bubuko.com,布布扣    function CreateClams: TClams; virtual; abstract;
22bubuko.com,布布扣  end;
23bubuko.com,布布扣
24bubuko.com,布布扣  TNYPizzaIngredientFactory = class(TPizzaIngredientFactory)
25bubuko.com,布布扣  public
26bubuko.com,布布扣    function CreateDough: TDough; override;
27bubuko.com,布布扣    function CreateSauce: TSauce; override;
28bubuko.com,布布扣    function CreateCheese: TCheese; override;
29bubuko.com,布布扣    function CreatePepperoni: TPepperoni; override;
30bubuko.com,布布扣    function CreateClams: TClams; override;
31bubuko.com,布布扣  end;
32bubuko.com,布布扣
33bubuko.com,布布扣  TChicagoPizzaIngredientFactory = class(TPizzaIngredientFactory)
34bubuko.com,布布扣  public
35bubuko.com,布布扣    function CreateDough: TDough; override;
36bubuko.com,布布扣    function CreateSauce: TSauce; override;
37bubuko.com,布布扣    function CreateCheese: TCheese; override;
38bubuko.com,布布扣    function CreatePepperoni: TPepperoni; override;
39bubuko.com,布布扣    function CreateClams: TClams; override;
40bubuko.com,布布扣  end;
41bubuko.com,布布扣
42bubuko.com,布布扣implementation
43bubuko.com,布布扣
44bubuko.com,布布扣{ TNYPizzaIngredientFactory }
45bubuko.com,布布扣
46bubuko.com,布布扣function TNYPizzaIngredientFactory.CreateCheese: TCheese;
47bubuko.com,布布扣begin
48bubuko.com,布布扣  Result := TReggianoCheese.Create;
49bubuko.com,布布扣end;
50bubuko.com,布布扣
51bubuko.com,布布扣function TNYPizzaIngredientFactory.CreateClams: TClams;
52bubuko.com,布布扣begin
53bubuko.com,布布扣  Result := TFreshClams.Create;
54bubuko.com,布布扣end;
55bubuko.com,布布扣
56bubuko.com,布布扣function TNYPizzaIngredientFactory.CreateDough: TDough;
57bubuko.com,布布扣begin
58bubuko.com,布布扣  Result := TThinCrustDough.Create;
59bubuko.com,布布扣end;
60bubuko.com,布布扣
61bubuko.com,布布扣function TNYPizzaIngredientFactory.CreatePepperoni: TPepperoni;
62bubuko.com,布布扣begin
63bubuko.com,布布扣  Result := TSlicedPepperoni.Create;
64bubuko.com,布布扣end;
65bubuko.com,布布扣
66bubuko.com,布布扣function TNYPizzaIngredientFactory.CreateSauce: TSauce;
67bubuko.com,布布扣begin
68bubuko.com,布布扣  Result := TMarinaraSauce.Create;
69bubuko.com,布布扣end;
70bubuko.com,布布扣
71bubuko.com,布布扣{ TChicagoPizzaIngredientFactory }
72bubuko.com,布布扣
73bubuko.com,布布扣function TChicagoPizzaIngredientFactory.CreateCheese: TCheese;
74bubuko.com,布布扣begin
75bubuko.com,布布扣  Result := TMozzarellaCheese.Create;
76bubuko.com,布布扣end;
77bubuko.com,布布扣
78bubuko.com,布布扣function TChicagoPizzaIngredientFactory.CreateClams: TClams;
79bubuko.com,布布扣begin
80bubuko.com,布布扣  Result := TFrozenClams.Create;
81bubuko.com,布布扣end;
82bubuko.com,布布扣
83bubuko.com,布布扣function TChicagoPizzaIngredientFactory.CreateDough: TDough;
84bubuko.com,布布扣begin
85bubuko.com,布布扣  Result := TThickCrustDough.Create;
86bubuko.com,布布扣end;
87bubuko.com,布布扣
88bubuko.com,布布扣function TChicagoPizzaIngredientFactory.CreatePepperoni: TPepperoni;
89bubuko.com,布布扣begin
90bubuko.com,布布扣  Result := TSlicedPepperoni.Create;
91bubuko.com,布布扣end;
92bubuko.com,布布扣
93bubuko.com,布布扣function TChicagoPizzaIngredientFactory.CreateSauce: TSauce;
94bubuko.com,布布扣begin
95bubuko.com,布布扣  Result := TPlumTomatoSauce.Create;
96bubuko.com,布布扣end;
97bubuko.com,布布扣
98bubuko.com,布布扣end.

bubuko.com,布布扣
  1bubuko.com,布布扣
  2bubuko.com,布布扣 {《HeadFirst设计模式》工厂模式之抽象工厂 }
  3bubuko.com,布布扣 { 抽象工厂的用户                       }
  4bubuko.com,布布扣 { 编译工具:Delphi7.0                  }
  5bubuko.com,布布扣 { E-Mail :guzh-0417@163.com          }
  6bubuko.com,布布扣
  7bubuko.com,布布扣unit uPizza;
  8bubuko.com,布布扣
  9bubuko.com,布布扣interface
 10bubuko.com,布布扣
 11bubuko.com,布布扣uses
 12bubuko.com,布布扣  uPizzaIngredient, uPizzaIngredientFactory;
 13bubuko.com,布布扣
 14bubuko.com,布布扣type
 15bubuko.com,布布扣  TPizza = class(TObject)
 16bubuko.com,布布扣  private
 17bubuko.com,布布扣    procedure SetName(const Value: string);
 18bubuko.com,布布扣  protected
 19bubuko.com,布布扣    FName: string;
 20bubuko.com,布布扣    FDough: TDough;
 21bubuko.com,布布扣    FSauce: TSauce;
 22bubuko.com,布布扣    FCheese: TCheese;
 23bubuko.com,布布扣    FPepperoni: TPepperoni;
 24bubuko.com,布布扣    FClams: TClams;
 25bubuko.com,布布扣    FIngredientFactory: TPizzaIngredientFactory;
 26bubuko.com,布布扣  public
 27bubuko.com,布布扣    constructor Create(aIngredientFactory: TPizzaIngredientFactory);
 28bubuko.com,布布扣    procedure Prepare; virtual; abstract;
 29bubuko.com,布布扣    procedure Bake;
 30bubuko.com,布布扣    procedure Cut;
 31bubuko.com,布布扣    procedure Box;
 32bubuko.com,布布扣    property Name: string read FName write SetName;
 33bubuko.com,布布扣  end;
 34bubuko.com,布布扣
 35bubuko.com,布布扣  TCheesePizza = class(TPizza)
 36bubuko.com,布布扣  public
 37bubuko.com,布布扣    destructor Destroy; override;
 38bubuko.com,布布扣    procedure Prepare; override;
 39bubuko.com,布布扣  end;
 40bubuko.com,布布扣
 41bubuko.com,布布扣  TClamsPizza = class(TPizza)
 42bubuko.com,布布扣  public
 43bubuko.com,布布扣    destructor Destroy; override;
 44bubuko.com,布布扣    procedure Prepare; override;
 45bubuko.com,布布扣  end;
 46bubuko.com,布布扣  
 47bubuko.com,布布扣implementation
 48bubuko.com,布布扣
 49bubuko.com,布布扣{ TPizza }
 50bubuko.com,布布扣
 51bubuko.com,布布扣procedure TPizza.Bake;
 52bubuko.com,布布扣begin
 53bubuko.com,布布扣  Writeln(‘Bake for 25 minutes at 350‘);
 54bubuko.com,布布扣end;
 55bubuko.com,布布扣
 56bubuko.com,布布扣procedure TPizza.Box;
 57bubuko.com,布布扣begin
 58bubuko.com,布布扣  Writeln(‘Place pizza in official PizzaStore box‘);
 59bubuko.com,布布扣end;
 60bubuko.com,布布扣
 61bubuko.com,布布扣constructor TPizza.Create(aIngredientFactory: TPizzaIngredientFactory);
 62bubuko.com,布布扣begin
 63bubuko.com,布布扣  Self.FIngredientFactory := aIngredientFactory;
 64bubuko.com,布布扣end;
 65bubuko.com,布布扣
 66bubuko.com,布布扣procedure TPizza.Cut;
 67bubuko.com,布布扣begin
 68bubuko.com,布布扣  Writeln(‘Cutting the pizza into diagonal slices‘);
 69bubuko.com,布布扣end;
 70bubuko.com,布布扣
 71bubuko.com,布布扣procedure TPizza.SetName(const Value: string);
 72bubuko.com,布布扣begin
 73bubuko.com,布布扣  FName := Value;
 74bubuko.com,布布扣end;
 75bubuko.com,布布扣
 76bubuko.com,布布扣{ TCheesePizza }
 77bubuko.com,布布扣
 78bubuko.com,布布扣destructor TCheesePizza.Destroy;
 79bubuko.com,布布扣begin
 80bubuko.com,布布扣  FDough.Free;
 81bubuko.com,布布扣  FSauce.Free;
 82bubuko.com,布布扣  FCheese.Free;
 83bubuko.com,布布扣  inherited;
 84bubuko.com,布布扣end;
 85bubuko.com,布布扣
 86bubuko.com,布布扣procedure TCheesePizza.Prepare;
 87bubuko.com,布布扣begin
 88bubuko.com,布布扣  Writeln(‘Preparing ‘ + Name);
 89bubuko.com,布布扣  FDough  := FIngredientFactory.CreateDough;
 90bubuko.com,布布扣  FSauce  := FIngredientFactory.CreateSauce;
 91bubuko.com,布布扣  FCheese := FIngredientFactory.CreateCheese;
 92bubuko.com,布布扣end;
 93bubuko.com,布布扣
 94bubuko.com,布布扣{ TClamsPizza }
 95bubuko.com,布布扣
 96bubuko.com,布布扣destructor TClamsPizza.Destroy;
 97bubuko.com,布布扣begin
 98bubuko.com,布布扣  FDough.Free;
 99bubuko.com,布布扣  FSauce.Free;
100bubuko.com,布布扣  FCheese.Free;
101bubuko.com,布布扣  FClams.Free;
102bubuko.com,布布扣  inherited;
103bubuko.com,布布扣end;
104bubuko.com,布布扣
105bubuko.com,布布扣procedure TClamsPizza.Prepare;
106bubuko.com,布布扣begin
107bubuko.com,布布扣  Writeln(‘Preparing ‘ + Name);
108bubuko.com,布布扣  FDough  := FIngredientFactory.CreateDough;
109bubuko.com,布布扣  FSauce  := FIngredientFactory.CreateSauce;
110bubuko.com,布布扣  FCheese := FIngredientFactory.CreateCheese;
111bubuko.com,布布扣  FClams  := FIngredientFactory.CreateClams;
112bubuko.com,布布扣end;
113bubuko.com,布布扣
114bubuko.com,布布扣end.

bubuko.com,布布扣
 1bubuko.com,布布扣
 2bubuko.com,布布扣 {《HeadFirst设计模式》工厂模式之抽象工厂 }
 3bubuko.com,布布扣 { Pizza的用户                         }
 4bubuko.com,布布扣 { 编译工具:Delphi7.0                 }
 5bubuko.com,布布扣 { E-Mail :guzh-0417@163.com         }
 6bubuko.com,布布扣
 7bubuko.com,布布扣unit uPizzaStore;
 8bubuko.com,布布扣
 9bubuko.com,布布扣interface
10bubuko.com,布布扣
11bubuko.com,布布扣uses
12bubuko.com,布布扣  uPizza, uPizzaIngredientFactory;
13bubuko.com,布布扣
14bubuko.com,布布扣type
15bubuko.com,布布扣  TPizzaStore = class(TObject)
16bubuko.com,布布扣  protected
17bubuko.com,布布扣    FPizza: TPizza;
18bubuko.com,布布扣    FIngredientFactory: TPizzaIngredientFactory;
19bubuko.com,布布扣  public
20bubuko.com,布布扣    destructor Destroy; override;
21bubuko.com,布布扣    function OrderPizza(Category: Integer): TPizza;
22bubuko.com,布布扣    function CreatePizza(Style: Integer): TPizza; virtual; abstract;
23bubuko.com,布布扣  end;
24bubuko.com,布布扣
25bubuko.com,布布扣  TNYPizzaStore = class(TPizzaStore)
26bubuko.com,布布扣  public
27bubuko.com,布布扣    function CreatePizza(Style: Integer): TPizza; override;
28bubuko.com,布布扣  end;
29bubuko.com,布布扣
30bubuko.com,布布扣  TChicagoPizzaStore = class(TPizzaStore)
31bubuko.com,布布扣  public
32bubuko.com,布布扣    function CreatePizza(Style: Integer): TPizza; override;
33bubuko.com,布布扣  end;
34bubuko.com,布布扣
35bubuko.com,布布扣implementation
36bubuko.com,布布扣
37bubuko.com,布布扣{ TPizzaStore }
38bubuko.com,布布扣
39bubuko.com,布布扣destructor TPizzaStore.Destroy;
40bubuko.com,布布扣begin
41bubuko.com,布布扣  FPizza.Free;
42bubuko.com,布布扣  FIngredientFactory.Free;
43bubuko.com,布布扣  inherited;
44bubuko.com,布布扣end;
45bubuko.com,布布扣
46bubuko.com,布布扣function TPizzaStore.OrderPizza(Category: Integer): TPizza;
47bubuko.com,布布扣begin
48bubuko.com,布布扣  FPizza := CreatePizza(Category);
49bubuko.com,布布扣  FPizza.Prepare;
50bubuko.com,布布扣  FPizza.Bake;
51bubuko.com,布布扣  FPizza.Cut;
52bubuko.com,布布扣  FPizza.Box;
53bubuko.com,布布扣
54bubuko.com,布布扣  Result := FPizza;
55bubuko.com,布布扣end;
56bubuko.com,布布扣
57bubuko.com,布布扣{ TNYPizzaStore }
58bubuko.com,布布扣
59bubuko.com,布布扣function TNYPizzaStore.CreatePizza(Style: Integer): TPizza;
60bubuko.com,布布扣begin
61bubuko.com,布布扣  FIngredientFactory := TNYPizzaIngredientFactory.Create;
62bubuko.com,布布扣  FPizza := nil;
63bubuko.com,布布扣  case Style of
64bubuko.com,布布扣    0: begin
65bubuko.com,布布扣         FPizza := TCheesePizza.Create(FIngredientFactory);
66bubuko.com,布布扣         FPizza.Name := ‘New York Style Cheese Pizza‘;
67bubuko.com,布布扣       end;
68bubuko.com,布布扣    1: begin
69bubuko.com,布布扣         FPizza := TClamsPizza.Create(FIngredientFactory);
70bubuko.com,布布扣         FPizza.Name := ‘New York Style Clams Pizza‘;
71bubuko.com,布布扣       end;
72bubuko.com,布布扣    //2: 其它风味的 New York Pizza
73bubuko.com,布布扣    //bubuko.com,布布扣
74bubuko.com,布布扣  end;
75bubuko.com,布布扣  Result := FPizza;
76bubuko.com,布布扣end;
77bubuko.com,布布扣
78bubuko.com,布布扣{ TChicagoPizzaStore }
79bubuko.com,布布扣
80bubuko.com,布布扣function TChicagoPizzaStore.CreatePizza(Style: Integer): TPizza;
81bubuko.com,布布扣begin
82bubuko.com,布布扣  FIngredientFactory := TChicagoPizzaIngredientFactory.Create;
83bubuko.com,布布扣  case Style of
84bubuko.com,布布扣    0: begin
85bubuko.com,布布扣         Result := TCheesePizza.Create(FIngredientFactory);
86bubuko.com,布布扣         Result.Name := ‘Chicago Style Cheese Pizza‘;
87bubuko.com,布布扣       end;
88bubuko.com,布布扣    1: begin
89bubuko.com,布布扣         Result := TClamsPizza.Create(FIngredientFactory);
90bubuko.com,布布扣         Result.Name := ‘Chicago Style Clams Pizza‘;
91bubuko.com,布布扣       end;
92bubuko.com,布布扣    //2: 其它风味的 Chicago Pizza
93bubuko.com,布布扣    //bubuko.com,布布扣
94bubuko.com,布布扣  else
95bubuko.com,布布扣    Result := nil;
96bubuko.com,布布扣  end;
97bubuko.com,布布扣end;
98bubuko.com,布布扣
99bubuko.com,布布扣end.

bubuko.com,布布扣
 1bubuko.com,布布扣
 2bubuko.com,布布扣 {《HeadFirst设计模式》工厂模式之抽象工厂 }
 3bubuko.com,布布扣 { 客户端                              }
 4bubuko.com,布布扣 { 编译工具:Delphi7.0                 }
 5bubuko.com,布布扣 { E-Mail :guzh-0417@163.com          }
 6bubuko.com,布布扣
 7bubuko.com,布布扣program pPizzaStore;
 8bubuko.com,布布扣
 9bubuko.com,布布扣{$APPTYPE CONSOLE}
10bubuko.com,布布扣
11bubuko.com,布布扣uses
12bubuko.com,布布扣  uPizzaIngredient in ‘uPizzaIngredient.pas‘,
13bubuko.com,布布扣  uPizzaIngredientFactory in ‘uPizzaIngredientFactory.pas‘,
14bubuko.com,布布扣  uPizza in ‘uPizza.pas‘,
15bubuko.com,布布扣  uPizzaStore in ‘uPizzaStore.pas‘;
16bubuko.com,布布扣
17bubuko.com,布布扣var
18bubuko.com,布布扣  PizzaStore: TPizzaStore;
19bubuko.com,布布扣  Pizza: TPizza;
20bubuko.com,布布扣  
21bubuko.com,布布扣begin
22bubuko.com,布布扣  PizzaStore := TNYPizzaStore.Create;
23bubuko.com,布布扣  Pizza := PizzaStore.OrderPizza(0);
24bubuko.com,布布扣  Writeln(‘Ethan ordered a ‘ + Pizza.Name);
25bubuko.com,布布扣  Writeln;
26bubuko.com,布布扣  Pizza := PizzaStore.OrderPizza(1);
27bubuko.com,布布扣  Writeln(‘Ethan ordered a ‘ + Pizza.Name);
28bubuko.com,布布扣  PizzaStore.Free;
29bubuko.com,布布扣  
30bubuko.com,布布扣  Writeln;
31bubuko.com,布布扣  Writeln(‘  **********************************  ‘);
32bubuko.com,布布扣  Writeln;
33bubuko.com,布布扣
34bubuko.com,布布扣  PizzaStore := TChicagoPizzaStore.Create;
35bubuko.com,布布扣  Pizza := PizzaStore.OrderPizza(0);
36bubuko.com,布布扣  Writeln(‘Joel ordered a ‘ + Pizza.Name);
37bubuko.com,布布扣  Writeln;
38bubuko.com,布布扣  Pizza := PizzaStore.OrderPizza(1);
39bubuko.com,布布扣  Writeln(‘Joel ordered a ‘ + Pizza.Name);
40bubuko.com,布布扣  PizzaStore.Free;
41bubuko.com,布布扣
42bubuko.com,布布扣  Readln;
43bubuko.com,布布扣end.

运行结果:

bubuko.com,布布扣

 

 
 

Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]

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

原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!