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[转]
适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为 ...
随机推荐
- iserver中的服务数据迁移
今天需要将iserver测试服务器上的空间数据服务(数据源是Oracle Plus)迁移到客户的正式服务器,原想需要很大的工作量,其实是这样简单: 一.保证客户的iserver环境都已安装正确.对于o ...
- (一)PHP基础知识考察点
1,PHP引用变量的考察点: 概念:引用就是用不同的名字访问同一个变量内容. 定义方式: 使用&符号. PHP引用变量的工作原理 这里有个COW copy on write 用zval() ...
- fatal error U1087: cannot have : and :: dependents for same target Stop.
转自VC错误:http://www.vcerror.com/?p=72 问题描述: 完成后编译,发现有错误 D:\WinDDK\7600.16385.1\bin\makefile.new(7117) ...
- ArrayList 和linkedList 插入比较
从学Java开始, 就一直大脑记着 arrayList 底层是数组 ,查询快, 插入慢, 有移动的动作.linkedList 底层链表, 插入快 查询慢,今天写了例子跑了跑, 果然. public ...
- 深夜Python - 第2夜 - 爬行
深夜Python - 第2夜 - 爬行 我曾经幻想自己是一只蜗牛,有自己的一只小壳,不怕风,不怕雨,浪荡江湖,游历四方……夜猫兄一如既往地打断了我不切实际的幻想:“浪荡?游历?等你退休了都爬不出家门口 ...
- 2019-2-17-如何在-Windows-10-中移除-Internet-Explorer-浏览器
title author date CreateTime categories 如何在 Windows 10 中移除 Internet Explorer 浏览器 lindexi 2019-02-17 ...
- Jmeter性能测试 入门【转】
Jmeter性能测试 入门[转] Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter ...
- Excel生成Oracle数据库表sql工具类
1.解决问题: 开发文档中字段比较多的时候,建表sql(Oracle下划线命名规范)比较麻烦,容易出错~~ (主要是懒) 特意手写一个工具,根据excel字段,生成建表的sql语句. ~~~末尾附Gi ...
- 第九章 Odoo 12开发之外部 API - 集成第三方系统
Odoo 服务器端带有外部 API,可供网页客户端和其它客户端应用使用.本文中我们将学习如何在我们的客户端程序中使用 Odoo 的外部 API.为避免引入大家所不熟悉的编程语言,此处我们将使用基于 P ...
- pytorch基础2
下面是常见函数的代码例子 import torch import numpy as np print("分割线---------------------------------------- ...