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[转]
适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为 ...
随机推荐
- duilib库分析4.第二篇UIBase
DUiLib 源码分析 ——以UiLib 1.01版为分析目标 ——colin3dmax 分析于2011-6-16 19:44------------------------------------- ...
- tp5 mkdir() 没有权限
- VS2010-MFC(常用控件:列表视图控件List Control 下)
转自:http://www.jizhuomi.com/software/197.html 上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构 ...
- java获取服务器路径
java获取服务器一些信息的方法(服务器地址/相对路径/端口/项目名字 request.getServletContext().getRealPath("/") 获取项目所在服务 ...
- Walk Through Squares HDU - 4758 AC自动机+简单状压DP
题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...
- java 测试时 程序的 运行时间
检测一个JAVA程序的运行时间方法:long startTime = System.currentTimeMillis();//获取当前时间//doSomeThing(); //要运行的java程 ...
- JS规则 我与你同在(逻辑与操作符)数学中的“b大于a,b小于c”是“a<b<c”,那么在JavaScript中可以用&&表示
我与你同在(逻辑与操作符) 数学里面的"a>b",在JavaScript中还表示为a>b:数学中的"b大于a,b小于c"是"a<b& ...
- 使用JS实现页面中动态添加文件上传输入项
1. 编写JSP <%@ page language="java" import="java.util.*" pageEncoding="UTF ...
- leetcode-123-买卖股票的最佳时机③
题目描述: 方法一: class Solution: def maxProfit(self, prices: List[int]) -> int: dp_i1_0 = 0 dp_i1_1 = f ...
- HZOI20190816模拟23 mine/water/gcd
A:mine 只是一个简单的dp....是博主太蒻了... 设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$ j==0表示填0,j==1表示填1,且i-1位是雷; j==2 ...