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[转]的更多相关文章

  1. Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---组合模式之Menus[转]

     1  2{<HeadFirst设计模式>之组合模式 }  3{ 组合与单项的抽象父类           }  4{ 编译工具:Delphi2007 for win32}  5{ E-M ...

  2. Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]

      1   2{<HeadFirst设计模式>工厂模式之工厂方法 }   3{ 产品类                              }   4{ 编译工具 :Delphi20 ...

  3. Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]

    一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口                            } ...

  4. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂

    简单工厂:工厂依据传进的参数创建相应的产品. http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html { ...

  5. Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]

     1  2 {<HeadFirst设计模式>工厂模式之抽象工厂 }  3 { 抽象工厂的产品                       }  4 { 编译工具:Delphi7.0     ...

  6. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport[转]

      1   2{<HeadFirst设计模式>之观察者模式 }   3{ 主题与观察者                    }   4{ 编译工具 :Delphi7.0          ...

  7. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]

    模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override).   1   2{<HeadFirst设计模式>之模板方法模式 }   3{ 编译工具: Del ...

  8. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---迭代器模式之DinerMenu[转]

    容器的主要职责有两个:存放元素和浏览元素.根据单一职责原则(SRP)要将二者分开,于是将浏览功能打包封装就有了迭代器. 用迭代器封装对动态数组的遍历:  1  2{<HeadFirst设计模式& ...

  9. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter[转]

    适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为 ...

随机推荐

  1. 双线程DP

    1.传纸条 好像是一道普及组水题? //Twenty #include<cstdio> #include<iostream> #include<cstring> # ...

  2. vue使用axios实现前后端通信

    安装依赖 npm install --save axios # vue-axios是对axios的简单封装 npm install --save vue-axios 用例 在main.js里面进行全局 ...

  3. python数据池,python3编码str转bytes,encode

    一.python2 python3的区别 默认编码:2--ASCII码  3---UTF-8 print:python2 可以不需要加括号(),python3必须加括号 python2中有range, ...

  4. 【CF900D】Unusual Sequences

    题目 智力下降严重 显然要反演了呀 首先必须满足\(x|y\),否则答案是\(0\) 我们枚举这个数列的\(gcd\)是\(d\)或者\(d\)的倍数 于是答案就是 \[\sum_{x|d}[d|y] ...

  5. c# Data = select new{} 返回值的显示

  6. js 实现纵向轮播

    效果 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  7. LeetCode 38.报数(Python3)

    题目: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  "one 1& ...

  8. 2019-8-31-dotnet-通过-WMI-获取系统启动的服务

    title author date CreateTime categories dotnet 通过 WMI 获取系统启动的服务 lindexi 2019-08-31 16:55:59 +0800 20 ...

  9. gulp 前端构建工具使用

    gulp 前端构建工具使用 1.新建一个web  h5项目 2.准备好gulpfile.js文件 (1)下载链接:https://pan.baidu.com/s/116J-BaYOMRzeJW3i_J ...

  10. vuex结合vue-cookies的使用

    一.创建vuex import Vue from 'vue' import Vuex from 'vuex' import cookie from "vue-cookies" Vu ...