Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler[转]
1
2{《HeadFirst设计模式》之单例模式 }
3{ 编译工具: Delphi2007 for win32 }
4{ E-Mail : guzh-0417@163.com }
5
6unit uChocolateBoiler;
7
8interface
9
10type
11 TChocolateBoiler = class(TObject)
12 strict private
13 class var
14 FUniqueInstance: TChocolateBoiler;
15 strict private
16 FEmpty : Boolean;
17 FBoiled: Boolean;
18 constructor Create;
19 public
20 class function GetInstance: TChocolateBoiler;
21 function IsEmpty : Boolean;
22 function IsBoiled: Boolean;
23 procedure Fill;
24 procedure Drain;
25 procedure Boil;
26 end;
27
28implementation
29
30{ TChocolateBoiler }
31
32procedure TChocolateBoiler.Boil;
33begin
34 if (not IsEmpty) and (not IsBoiled) then
35 FBoiled := True;
36end;
37
38constructor TChocolateBoiler.Create;
39begin
40 FEmpty := True;
41 FBoiled := False;
42end;
43
44procedure TChocolateBoiler.Drain;
45begin
46 if (not IsEmpty) and IsBoiled then
47 FEmpty := True;
48end;
49
50procedure TChocolateBoiler.Fill;
51begin
52 if IsEmpty then
53 begin
54 FEmpty := False;
55 FBoiled := False;
56 end;
57end;
58
59class function TChocolateBoiler.GetInstance: TChocolateBoiler;
60begin
61 if FUniqueInstance = nil then
62 begin
63 Writeln('Creating unique instance of Chocolate Boiler.');
64 FUniqueInstance := TChocolateBoiler.Create;
65 end;
66
67 Writeln('Returning instance of Chocolate Boiler.');
68 Result := FUniqueInstance;
69end;
70
71function TChocolateBoiler.IsBoiled: Boolean;
72begin
73 Result := FBoiled;
74end;
75
76function TChocolateBoiler.IsEmpty: Boolean;
77begin
78 Result := FEmpty;
79end;
80
81end.
1
2{《HeadFirst设计模式》之单例模式 }
3{ 客户端 }
4{ 编译工具: Delphi2007 for win32 }
5{ E-Mail : guzh-0417@163.com }
6
7program pChocolateBoilerController;
8
9{$APPTYPE CONSOLE}
10
11uses
12 SysUtils,
13 uChocolateBoiler in 'uChocolateBoiler.pas';
14
15var
16 aBoiler : TChocolateBoiler;
17 aBoiler2: TChocolateBoiler;
18
19begin
20 aBoiler := TChocolateBoiler.GetInstance;
21 aBoiler.Fill;
22 aBoiler.Boil;
23 aBoiler.Drain;
24
25 { will return the existing instance: aBoiler }
26 aBoiler2 := TChocolateBoiler.GetInstance;
27
28 FreeAndNil(aBoiler);
29 { FreeAndNil(aBoiler2); 同一对象(aBoiler)不能释放两次。}
30
31 Readln;
32end.
运行结果:
Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler[转]的更多相关文章
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---组合模式之Menus[转]
1 2{<HeadFirst设计模式>之组合模式 } 3{ 组合与单项的抽象父类 } 4{ 编译工具:Delphi2007 for win32} 5{ E-M ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]
1 2{<HeadFirst设计模式>工厂模式之工厂方法 } 3{ 产品类 } 4{ 编译工具 :Delphi20 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]
一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口 } ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂
简单工厂:工厂依据传进的参数创建相应的产品. http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html { ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]
1 2 {<HeadFirst设计模式>工厂模式之抽象工厂 } 3 { 抽象工厂的产品 } 4 { 编译工具:Delphi7.0 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport[转]
1 2{<HeadFirst设计模式>之观察者模式 } 3{ 主题与观察者 } 4{ 编译工具 :Delphi7.0 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]
模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override). 1 2{<HeadFirst设计模式>之模板方法模式 } 3{ 编译工具: Del ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---迭代器模式之DinerMenu[转]
容器的主要职责有两个:存放元素和浏览元素.根据单一职责原则(SRP)要将二者分开,于是将浏览功能打包封装就有了迭代器. 用迭代器封装对动态数组的遍历: 1 2{<HeadFirst设计模式& ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter[转]
适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为 ...
随机推荐
- kkFileView在centos7上安装
kkFileView是使用spring boot打造文件文档在线预览项目解决方案. 项目地址:https://gitee.com/kekingcn/file-online-preview 安装步骤: ...
- 服务器断过一次电之后,mysql启动不了了
公司内部服务器,周末会直接拉闸断电,之前也没问题,但这次回来发现mysql启动不了了. service mysqld start 提示: Starting MySQL.The server quit ...
- win7防火墙里开启端口的图文教程 + SNMP测试感触
转:http://www.cnblogs.com/vipsoft/archive/2012/05/02/2478847.html 开启端口:打开“控制面板”中的“Windows防火墙”,点击左侧的“高 ...
- .net core, docker 在vs2019开发过程中的问题以及解决办法
.net core, docker 在vs2019开发过程中的问题以及解决办法 记录下来,帮助Ta人~ 1.vs调试,快Build完后提示Docker 端口:xxxx,xxxx,xxxx占用 解决办法 ...
- JS 常用的两个客户端输出方法
document.write(str) 描述:在网页的<body>标记,输出str的内容. document意思“文档”,就是整个网页了. document是一个文档对象,代表 ...
- python元组与字典
一.元组 1.元组的表达 (1,2,3,4) ('olive',123) ("python",) 创建元组: a=tuple((1,2,3,)) b=("python&q ...
- P1030 求先序排列 /// 二叉树的遍历
题目大意: 给一棵树的中序排列 后序排列,求这棵树的先序排列 https://www.luogu.org/problemnew/show/P1030 二叉树的四种遍历解说 几种遍历的递归实现 后序排列 ...
- react之可控组件与不可控组件
一.不可控组件 <input type="text" defaultvalue="Hello React" /> 如上:defaultvalue的值 ...
- windows10 vs2019 + opencv 3.4.7环境搭建
windows vs2019 + opencv 3.4.7环境搭建 安装Opencv 3.4.7 下载 Opencv 第1步 进入 opencv releases 页面,点击 "Window ...
- [JZOJ4648] 【NOIP2016提高A组模拟7.17】锦标赛
题目 描述 题目大意 有nnn个人,你要确定一个出场序列.每次新上台的人就会和擂主打一架,胜利的人继续当擂主.题目给出两两之间打架胜利(失败)的概率. 问111选手坚持到最后的最大概率. 思考历程 看 ...