Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂[转]
1
2{《HeadFirst设计模式》工厂模式之简单工厂 }
3{ 产品类 }
4{ 编译工具 :Delphi7.0 }
5{ 联系方式 :guzh-0417@163.com }
6
7unit uProducts;
8
9interface
10
11type
12 TPizza = class(TObject)
13 public
14 procedure Prepare; virtual; abstract;
15 procedure Bake; virtual; abstract;
16 procedure Cut; virtual; abstract;
17 procedure Box; virtual; abstract;
18 end;
19
20 TCheesePizza = class(TPizza)
21 public
22 procedure Prepare; override;
23 procedure Bake; override;
24 procedure Cut; override;
25 procedure Box; override;
26 end;
27
28 TVeggiePizza = class(TPizza)
29 public
30 procedure Prepare; override;
31 procedure Bake; override;
32 procedure Cut; override;
33 procedure Box; override;
34 end;
35
36 TClamPizza = class(TPizza)
37 public
38 procedure Prepare; override;
39 procedure Bake; override;
40 procedure Cut; override;
41 procedure Box; override;
42 end;
43
44 TPepperoniPizza = class(TPizza)
45 public
46 procedure Prepare; override;
47 procedure Bake; override;
48 procedure Cut; override;
49 procedure Box; override;
50 end;
51
52implementation
53
54{ TCheesePizza }
55
56procedure TCheesePizza.Bake;
57begin
58 Writeln('烘烤奶油比萨');
59end;
60
61procedure TCheesePizza.Box;
62begin
63 Writeln('将奶油比萨装盒');
64end;
65
66procedure TCheesePizza.Cut;
67begin
68 Writeln('将奶油比萨切成片');
69end;
70
71procedure TCheesePizza.Prepare;
72begin
73 Writeln('准备奶油比萨');
74end;
75
76{ TVeggiePizza }
77
78procedure TVeggiePizza.Bake;
79begin
80 Writeln('烘烤素比萨');
81end;
82
83procedure TVeggiePizza.Box;
84begin
85 Writeln('将素比萨装盒');
86end;
87
88procedure TVeggiePizza.Cut;
89begin
90 Writeln('将素比萨切成片');
91end;
92
93procedure TVeggiePizza.Prepare;
94begin
95 Writeln('准备素比萨');
96end;
97
98{ TClamPizza }
99
100procedure TClamPizza.Bake;
101begin
102 Writeln('烘烤蛤蛎比萨');
103end;
104
105procedure TClamPizza.Box;
106begin
107 Writeln('将蛤蛎比萨装盒');
108end;
109
110procedure TClamPizza.Cut;
111begin
112 Writeln('将蛤蛎比萨切成片');
113end;
114
115procedure TClamPizza.Prepare;
116begin
117 Writeln('准备蛤蛎比萨');
118end;
119
120{ TPepperoniPizza }
121
122procedure TPepperoniPizza.Bake;
123begin
124 Writeln('烘烤Pepperoni比萨');
125end;
126
127procedure TPepperoniPizza.Box;
128begin
129 Writeln('将Pepperoni比萨装盒');
130end;
131
132procedure TPepperoniPizza.Cut;
133begin
134 Writeln('将Pepperoni比萨切成片');
135end;
136
137procedure TPepperoniPizza.Prepare;
138begin
139 Writeln('准备Pepperoni比萨');
140end;
141
142end.
1
2{《HeadFirst设计模式》工厂模式之简单工厂 }
3{ 简单工厂类 }
4{ 编译工具 :Delphi7.0 }
5{ 联系方式 :guzh-0417@163.com }
6
7unit uSimpleFactory;
8
9interface
10
11uses
12 uProducts;
13
14type
15 { 静态工厂 }
16 TSimplePizzaFactory = class(TObject)
17 public
18 class function CreatePizza(Category: Integer): TPizza;
19 end;
20
21implementation
22
23{ TSimplePizzaFactory }
24
25class function TSimplePizzaFactory.CreatePizza(Category: Integer): TPizza;
26begin
27 case Category of
28 0: Result := TCheesePizza.Create; {创建奶油比萨 }
29 1: Result := TVeggiePizza.Create; {创建素比萨 }
30 2: Result := TClamPizza.Create; {创建蛤蛎比萨 }
31 3: Result := TPepperoniPizza.Create; {创建Pepperoni比萨 }
32 else
33 Result := nil;
34 end; // end case.
35end;
36
37end.
1
2{《HeadFirst设计模式》工厂模式之简单工厂 }
3{ 简单工厂的用户类 }
4{ 编译工具 :Delphi7.0 }
5{ 联系方式 :guzh-0417@163.com }
6
7unit uUserOfSimpleFactory;
8
9interface
10
11uses
12 uProducts, uSimpleFactory;
13
14type
15 { 工厂的用户 }
16 TPizzaStore = class(TObject)
17 public
18 procedure OrderPizza;
19 end;
20
21implementation
22
23{ TOrderPizza }
24
25procedure TPizzaStore.OrderPizza;
26var
27 aPizza: TPizza;
28begin
29 aPizza := TSimplePizzaFactory.CreatePizza(0);
30
31 aPizza.Prepare();
32 aPizza.Bake();
33 aPizza.Cut();
34 aPizza.Box();
35
36 aPizza.Free;
37end;
38
39end.
1
2{《HeadFirst设计模式》工厂模式之简单工厂 }
3{ 客户端 }
4{ 编译工具 :Delphi7.0 }
5{ 联系方式 :guzh-0417@163.com }
6
7program pPizzaStoreTest;
8
9{$APPTYPE CONSOLE}
10
11uses
12 uProducts in 'uProducts.pas',
13 uSimpleFactory in 'uSimpleFactory.pas',
14 uUserOfSimpleFactory in 'uUserOfSimpleFactory.pas';
15
16var
17 aPizzaStore: TPizzaStore;
18
19begin
20 aPizzaStore := TPizzaStore.Create;
21 aPizzaStore.OrderPizza;
22 aPizzaStore.Free;
23
24 Readln;
25end.
运行结果:
转载于:https://www.cnblogs.com/0x2D-0x22/p/4076335.html
Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂[转]相关推荐
- 设计模式—工厂模式之简单工厂模式
1. 简单工厂模式简介 简单工厂模式(Simple Factory),又被称为"静态工厂方法模式".它属于"创建模式"(创建对象的模式),并且是"工厂 ...
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...
- JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】
目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式 看一个具体的需求 看一个披萨的项目:要便 ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- 1小时搞懂设计模式之工厂模式(简单工厂)
1 什么是工厂模式 一说到工厂你有可能会想到 食品加工厂,汽车工厂,钢厂等. 这些工厂能帮我们干什么呢? 比如:食品加工厂帮我们生产 面包 饼干,汽车工厂帮我们生产汽车 .钢厂能帮我们生产钢.诸如这些 ...
- 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:3.工厂模式之简单工厂模式
在没有工厂的时代,客户真的什么都要操心,随着社会的进步,终于引来了工业革命. 一.引言 在没有工厂的时代,客户需要知道怎么去创建一款车,客户和车的生产就紧密耦合在一起了. 为了降低耦合,就出现了工厂类 ...
- GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式
设计模式可以大大提高代码复用性,使得程序的修改更加灵活.另外将各个功能模块抽象解耦出来,在某个模块需要更改时不至于会对整体代码进行修改,解耦的好的话只简单修改几个地方即可以切换某个模块在实现上的切换, ...
- Java工厂模式(简单工厂、工厂方法、抽象工厂)详解
工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...
- 工厂模式(简单工厂 工厂方法 抽象工厂)
简单工厂模式 简单工厂模式又叫做静态工厂方法模式(static Factory Method pattern),它是通过使用静态方法接收不同的参数来返回不同的实例对象(这些产品类继承自一个父类或接口) ...
- java简单工厂模式_Java 简单工厂模式
Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...
最新文章
- PyCharm开启或关闭科学模式
- Thinkphp框架中D()和M()的区别
- 用c语言画滚动的圆,求__C语言实现圆球滚动{高手速来}
- typeorm 生成实体类_android常用orm框架greenDAO创建表生成实体类
- 使用 CXF 做 webservice 简单例子
- android media apex_APEX英雄主播即将登陆时代广场?人气十强介绍!
- Ubuntu18 Win10搭建Caffe训练识别mnist手写数字demo
- netty发送对象消息
- LeetCode_database刷题记录(182. 查找重复的电子邮箱)
- 为什么JS中0.1+0.2 != 0.3
- 发布一个MsBuild任务组件-可用于同时发布多个网站
- Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?
- Joe Hocking - Unity in Action. 2nd Ed [2018]
- 【嵌入式模块】ESP8266完整教程
- 使用xlang开发隐形水印制作工具
- pg_stat_statements
- 辅助驾驶功能开发-功能规范篇(04)- 交通拥堵辅助及集成式巡航辅助TJA/ICA
- CentOS 6.3安装chrome
- A股-入门-融资融券介绍及操作技巧
- LNK1104:无法打开文件kernel32.lib的解决方法解决方法
热门文章
- Springboot JpaRepository findOne() 方法报错
- PowerDesigner数据库设计PDM基于Excel的导入导出总结
- ELK pipeline
- 使用soap遇到的缓存问题
- RuiJie命令行划VLAN
- 20145202马超《信息安全系统设计基础》实验三总结
- [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
- 在.Net中进行SQL Server数据库备份与还原操作实用类
- H凹变换—lhMorpHConcave
- SQL SERVER 2000日期处理(转)