1. 产品类 {《HeadFirst设计模式》工厂模式之简单工厂 } { 产品类 } { 编译工具 :Delphi7.0 } { 联系方式 :xshlife@163.com } unit uProducts; interface type TPizza = class(TObject) public procedure Prepare; virtual; abstract; procedure Bake; virtual; abstract; procedure Cut; virtual; abstract; procedure Box; virtual; abstract; end; TCheesePizza = class(TPizza) public procedure Prepare; override; procedure Bake; override; procedure Cut; override; procedure Box; override; end; TVeggiePizza = class(TPizza) public procedure Prepare; override; procedure Bake; override; procedure Cut; override; procedure Box; override; end; TClamPizza = class(TPizza) public procedure Prepare; override; procedure Bake; override; procedure Cut; override; procedure Box; override; end; TPepperoniPizza = class(TPizza) public procedure Prepare; override; procedure Bake; override; procedure Cut; override; procedure Box; override; end; implementation { TCheesePizza } procedure TCheesePizza.Bake; begin Writeln('烘烤奶油比萨'); end; procedure TCheesePizza.Box; begin Writeln('将奶油比萨装盒'); end; procedure TCheesePizza.Cut; begin Writeln('将奶油比萨切成片'); end; procedure TCheesePizza.Prepare; begin Writeln('准备奶油比萨'); end; { TVeggiePizza } procedure TVeggiePizza.Bake; begin Writeln('烘烤素比萨'); end; procedure TVeggiePizza.Box; begin Writeln('将素比萨装盒'); end; procedure TVeggiePizza.Cut; begin Writeln('将素比萨切成片'); end; procedure TVeggiePizza.Prepare; begin Writeln('准备素比萨'); end; { TClamPizza } procedure TClamPizza.Bake; begin Writeln('烘烤蛤蛎比萨'); end; procedure TClamPizza.Box; begin Writeln('将蛤蛎比萨装盒'); end; procedure TClamPizza.Cut; begin Writeln('将蛤蛎比萨切成片'); end; procedure TClamPizza.Prepare; begin Writeln('准备蛤蛎比萨'); end; { TPepperoniPizza } procedure TPepperoniPizza.Bake; begin Writeln('烘烤Pepperoni比萨'); end; procedure TPepperoniPizza.Box; begin Writeln('将Pepperoni比萨装盒'); end; procedure TPepperoniPizza.Cut; begin Writeln('将Pepperoni比萨切成片'); end; procedure TPepperoniPizza.Prepare; begin Writeln('准备Pepperoni比萨'); end; end. 2.简单工厂类 {《HeadFirst设计模式》工厂模式之简单工厂 } { 简单工厂类 } { 编译工具 :Delphi7.0 } { 联系方式 :xshlife@163.com } unit uSimpleFactory; interface uses uProducts; type { 静态工厂 } TSimplePizzaFactory = class(TObject) public class function CreatePizza(Category: Integer): TPizza; end; implementation { TSimplePizzaFactory } class function TSimplePizzaFactory.CreatePizza(Category: Integer): TPizza; begin case Category of 0: Result := TCheesePizza.Create; {创建奶油比萨 } 1: Result := TVeggiePizza.Create; {创建素比萨 } 2: Result := TClamPizza.Create; {创建蛤蛎比萨 } 3: Result := TPepperoniPizza.Create; {创建Pepperoni比萨 } else Result := nil; end; // end case. end; end. 3.简单工厂的用户类 {《HeadFirst设计模式》工厂模式之简单工厂 } { 简单工厂的用户类 } { 编译工具 :Delphi7.0 } { 联系方式 :xshlife@163.com } unit uUserOfSimpleFactory; interface uses uProducts, uSimpleFactory; type { 工厂的用户 } TPizzaStore = class(TObject) public procedure OrderPizza; end; implementation { TOrderPizza } procedure TPizzaStore.OrderPizza; var aPizza: TPizza; begin aPizza := TSimplePizzaFactory.CreatePizza(0); aPizza.Prepare(); aPizza.Bake(); aPizza.Cut(); aPizza.Box(); aPizza.Free; end; end. 4.客户端 {《HeadFirst设计模式》工厂模式之简单工厂 } { 客户端 } { 编译工具 :Delphi7.0 } { 联系方式 :xshlife@163.com } program pPizzaStoreTest; {$APPTYPE CONSOLE} uses uProducts in 'uProducts.pas', uSimpleFactory in 'uSimpleFactory.pas', uUserOfSimpleFactory in 'uUserOfSimpleFactory.pas'; var aPizzaStore: TPizzaStore; begin aPizzaStore := TPizzaStore.Create; aPizzaStore.OrderPizza; aPizzaStore.Free; Readln; end. 运行结果: