1
  2{《HeadFirst设计模式》工厂模式之工厂方法 }
  3{ 产品类                              }
  4{ 编译工具 :Delphi2007 for win32      }
  5{ 联系方式 :guzh-0417@163.com         }
  6
  7unit uProducts;
  8
  9interface
 10
 11type
 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
 77implementation
 78
 79{ TPizza }
 80
 81procedure TPizza.Bake;
 82begin
 83  Writeln('Bake for 25 minutes at 350');
 84end;
 85
 86procedure TPizza.Box;
 87begin
 88  Writeln('Place pizza in official PizzaStore box');
 89end;
 90
 91procedure TPizza.Cut;
 92begin
 93  Writeln('Cutting the pizza into diaginal slices');
 94end;
 95
 96function TPizza.GetName: string;
 97begin
 98  Result := FName;
 99end;
100
101procedure TPizza.Prepare;
102begin
103  Writeln('Preparing ' + FName);
104  Writeln('Tossing dough');
105  Writeln('Adding sauce');
106  Writeln('Adding topping:');
107end;
108
109{ TNYStyleCheesePizza }
110
111constructor TNYStyleCheesePizza.Create;
112begin
113  FName  := 'NY Style Sauce and Cheese Pizza';
114  FDough := 'Thin Crust Dough';
115  FSauce := 'Marinara Sauce';
116end;
117
118{ TNYStyleClamPizza }
119
120constructor TNYStyleClamPizza.Create;
121begin
122  FName  := 'NY Style Clam Pizza';
123  FDough := 'Thin Crust Dough';
124  FSauce := 'Marinara Sauce';
125end;
126
127{ TNYStylePepperoniPizza }
128
129constructor TNYStylePepperoniPizza.Create;
130begin
131  FName  := 'NY Style Pepperoni Pizza';
132  FDough := 'Thin Crust Dough';
133  FSauce := 'Marinara Sauce';
134end;
135
136{ TNYStyleVeggieizza }
137
138constructor TNYStyleVeggiePizza.Create;
139begin
140  FName  := 'NY Style Veggie Pizza';
141  FDough := 'Thin Crust Dough';
142  FSauce := 'Marinara Sauce';
143end;
144
145{ TChicagoStyleCheesePizza }
146
147constructor TChicagoStyleCheesePizza.Create;
148begin
149  FName  := 'Chicago Style Deep Dish Cheese Pizza';
150  FDough := 'Extra Thick Crust Dough';
151  FSauce := 'Plum Tomato Sauce';
152end;
153
154procedure TChicagoStyleCheesePizza.Cut;
155begin
156  Writeln('Cutting the pizza into square slices');
157end;
158
159{ TChicagoStyleClamPizza }
160
161constructor TChicagoStyleClamPizza.Create;
162begin
163  FName  := 'Chicago Style Clam Pizza';
164  FDough := 'Extra Thick Crust Dough';
165  FSauce := 'Plum Tomato Sauce';
166end;
167
168procedure TChicagoStyleClamPizza.Cut;
169begin
170  Writeln('Cutting the pizza into square slices');
171end;
172
173{ TChicagoStylePepperoniPizza }
174
175constructor TChicagoStylePepperoniPizza.Create;
176begin
177  FName  := 'Chicago Style Pepperoni Pizza';
178  FDough := 'Extra Thick Crust Dough';
179  FSauce := 'Plum Tomato Sauce';
180end;
181
182procedure TChicagoStylePepperoniPizza.Cut;
183begin
184  Writeln('Cutting the pizza into square slices');
185end;
186
187{ TChicagoStyleVeggiePizza }
188
189constructor TChicagoStyleVeggiePizza.Create;
190begin
191  FName  := 'Chicago Style Veggie Pizza';
192  FDough := 'Extra Thick Crust Dough';
193  FSauce := 'Plum Tomato Sauce';
194end;
195
196procedure TChicagoStyleVeggiePizza.Cut;
197begin
198  Writeln('Cutting the pizza into square slices');
199end;
200
201end.
202
 1
 2{《HeadFirst设计模式》工厂模式之工厂方法 }
 3{ 工厂类                              }
 4{ 编译工具 :Delphi2007 for win32     }
 5{ 联系方式 :guzh-0417@163.com        }
 6
 7unit uFactory;
 8
 9interface
10
11uses
12  uProducts;
13
14type
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
35implementation
36
37{ TPizzaStore }
38
39function TPizzaStore.OrderPizza(Category: Integer): TPizza;
40begin
41  FPizza := CreatePizza(Category);
42  
43  FPizza.Prepare;
44  FPizza.Bake;
45  FPizza.Cut;
46  FPizza.Box;
47
48  Result := FPizza;
49end;
50
51{ TNYPizzaStore }
52
53function TNYPizzaStore.CreatePizza(Category: Integer): TPizza;
54begin
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;
63end;
64
65destructor TNYPizzaStore.Destroy;
66begin
67  FPizza.Free;
68  inherited Destroy;
69end;
70
71{ TChicagoPizzaStore }
72
73function TChicagoPizzaStore.CreatePizza(Category: Integer): TPizza;
74begin
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;
83end;
84
85destructor TChicagoPizzaStore.Destroy;
86begin
87  FPizza.Free;
88  inherited Destroy;
89end;
90
91end.
92
 1
 2{《HeadFirst设计模式》工厂模式之工厂方法 }
 3{ 客户端                              }
 4{ 编译工具 :Delphi2007 for win32     }
 5{ 联系方式 :guzh-0417@163.com        }
 6
 7program pPizzaStoreTest;
 8
 9{$APPTYPE CONSOLE}
10
11uses
12  uFactory in 'uFactory.pas',
13  uProducts in 'uProducts.pas';
14
15var
16  aNYStore: TPizzaStore;
17  aChicagoStore: TPizzaStore;
18  aPizza: TPizza;
19
20begin
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;
34end.
35

运行结果:

 
 

Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]的更多相关文章

  1. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  2. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

  3. Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)

    Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...

  4. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

    1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html   v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客 ...

  5. iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

    1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下 ...

  6. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

  7. C# 设计模式(1)——简单工厂模式、工厂模式、抽象工厂模式

    1.前言 上一篇写了设计模式原则有助于我们开发程序的时候能写出高质量的代码(牵一发而不动全身),这个系列还是做个笔记温习一下各种设计模式,下面就看看简单工厂模式.工厂模式.抽象工厂模式. 2.简单工厂 ...

  8. iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

    1. 简单工厂模式 怎样理解简单工厂,工厂方法. 抽象工厂三种设计模式? 简单工厂的生活场景.卖早点的小摊贩.他给你提供包子,馒头,地沟油烙的煎饼等,小贩是一个工厂.它生产包子,馒头,地沟油烙的煎饼. ...

  9. C#设计模式——简单工厂模式、工厂模式和抽象工厂模式

    一:简单工厂模式 1:描述:简单工厂模式是由一个工厂对象根据接收到的消息决定要创建哪一个类的对象事例. 2:优点:工厂类中有相关逻辑判断,可以根据需要动态创建相关的对象事例,而客户端只需要告诉工厂类创 ...

随机推荐

  1. PSCC2019常用基础操作

    一.常用设置 1.界面设置(快捷键Ctrl+K):可以对PS界面的颜色.导出格式.性能等等进行设置(这里暂存盘建议设置D盘或F盘,默认C盘). 2.常用面板整理(菜单栏->窗口) 二.常用快捷键 ...

  2. DP杂题2

    1.邦邦的大合唱站队 https://www.luogu.org/problem/show?pid=3694 XY说这是道简单的签到题,然后我大概是普及组都拿不到三等的那种了.. 插入题解.写得太好了 ...

  3. python支付宝页面扫码支付

    一.介绍 基于网上一个支付宝pay.py封装了支付宝API的文件进行的,以下代码只支持网页扫码支付,手机端会提示调用支付宝支付 #pay文件代码 from datetime import dateti ...

  4. 尚学linux课程---9、yum相关操作和知识

    尚学linux课程---9.yum相关操作和知识 一.总结 一句话总结: 如何使用比如163,阿里云给yum配置yum源:去官网,不要百度:直接去官网,有帮助文档的(比如centos的就在centos ...

  5. C#winform datagridview单元格的单击处理

    首先看看效果图: 需求:要求是的在datagridview里面绑定数据后,可以任意点击想要点击的某列的单元格进行改变数据.需要在datagridview里面写3个事件 1.RowPrePaint事件: ...

  6. Java lambda尝鲜

    最近Java 11都出来了,java 8 的很多新特性还没用过,比如接口可以有方法体啦,default默认方法. 当然最大的特性就是支持函数式编程了.Java 8 提供了lambda表达式和方法引用来 ...

  7. hdu-1394(线段树求最小逆序数)

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意: 给定一个n,然后又n个数字,首先,这些数字的大小是从0开始到n-1,比如样例n=10,则这十个数就 ...

  8. 20.multi_case05

    #coding:utf-8 # 通过gather方法 import asyncio async def a(t): print('-->', t) await asyncio.sleep(0.5 ...

  9. 06_mybatis关系映射

    1.数据库表分析 表与表之间的业务关系: ​ 在分析表与表之间的业务关系时需要建立 在某个业务意义基础上去分析; ​ 先分析数据级别之间有关系的表之间的业务关系; usre和orders: ​ use ...

  10. css盒模型问题

    css盒模型问题 1.基本概念:标准模型和ie模型 2.标准模型和ie模型的区别 3.css如果设置这两种模型 4.js如何获取盒模型的宽高 5.边距重叠 6.BFC 1.CSS盒模型本质上是一个盒子 ...