简单工厂:工厂依据传进的参数创建相应的产品。


  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. 设计模式—工厂模式之简单工厂模式

    1. 简单工厂模式简介 简单工厂模式(Simple Factory),又被称为"静态工厂方法模式".它属于"创建模式"(创建对象的模式),并且是"工厂 ...

  2. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

  3. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  4. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  5. 1小时搞懂设计模式之工厂模式(简单工厂)

    1 什么是工厂模式 一说到工厂你有可能会想到 食品加工厂,汽车工厂,钢厂等. 这些工厂能帮我们干什么呢? 比如:食品加工厂帮我们生产 面包 饼干,汽车工厂帮我们生产汽车 .钢厂能帮我们生产钢.诸如这些 ...

  6. 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:3.工厂模式之简单工厂模式

    在没有工厂的时代,客户真的什么都要操心,随着社会的进步,终于引来了工业革命. 一.引言 在没有工厂的时代,客户需要知道怎么去创建一款车,客户和车的生产就紧密耦合在一起了. 为了降低耦合,就出现了工厂类 ...

  7. GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式

    设计模式可以大大提高代码复用性,使得程序的修改更加灵活.另外将各个功能模块抽象解耦出来,在某个模块需要更改时不至于会对整体代码进行修改,解耦的好的话只简单修改几个地方即可以切换某个模块在实现上的切换, ...

  8. Java工厂模式(简单工厂、工厂方法、抽象工厂)详解

    工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...

  9. 工厂模式(简单工厂 工厂方法 抽象工厂)

    简单工厂模式 简单工厂模式又叫做静态工厂方法模式(static Factory Method pattern),它是通过使用静态方法接收不同的参数来返回不同的实例对象(这些产品类继承自一个父类或接口) ...

  10. java简单工厂模式_Java 简单工厂模式

    Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...

最新文章

  1. PyCharm开启或关闭科学模式
  2. Thinkphp框架中D()和M()的区别
  3. 用c语言画滚动的圆,求__C语言实现圆球滚动{高手速来}
  4. typeorm 生成实体类_android常用orm框架greenDAO创建表生成实体类
  5. 使用 CXF 做 webservice 简单例子
  6. android media apex_APEX英雄主播即将登陆时代广场?人气十强介绍!
  7. Ubuntu18 Win10搭建Caffe训练识别mnist手写数字demo
  8. netty发送对象消息
  9. LeetCode_database刷题记录(182. 查找重复的电子邮箱)
  10. 为什么JS中0.1+0.2 != 0.3
  11. 发布一个MsBuild任务组件-可用于同时发布多个网站
  12. Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?
  13. Joe Hocking - Unity in Action. 2nd Ed [2018]
  14. 【嵌入式模块】ESP8266完整教程
  15. 使用xlang开发隐形水印制作工具
  16. pg_stat_statements
  17. 辅助驾驶功能开发-功能规范篇(04)- 交通拥堵辅助及集成式巡航辅助TJA/ICA
  18. CentOS 6.3安装chrome
  19. A股-入门-融资融券介绍及操作技巧
  20. LNK1104:无法打开文件kernel32.lib的解决方法解决方法

热门文章

  1. Springboot JpaRepository findOne() 方法报错
  2. PowerDesigner数据库设计PDM基于Excel的导入导出总结
  3. ELK pipeline
  4. 使用soap遇到的缓存问题
  5. RuiJie命令行划VLAN
  6. 20145202马超《信息安全系统设计基础》实验三总结
  7. [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
  8. 在.Net中进行SQL Server数据库备份与还原操作实用类
  9. H凹变换—lhMorpHConcave
  10. SQL SERVER 2000日期处理(转)