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. kkFileView在centos7上安装

    kkFileView是使用spring boot打造文件文档在线预览项目解决方案. 项目地址:https://gitee.com/kekingcn/file-online-preview 安装步骤: ...

  2. 服务器断过一次电之后,mysql启动不了了

    公司内部服务器,周末会直接拉闸断电,之前也没问题,但这次回来发现mysql启动不了了. service mysqld start 提示: Starting MySQL.The server quit ...

  3. win7防火墙里开启端口的图文教程 + SNMP测试感触

    转:http://www.cnblogs.com/vipsoft/archive/2012/05/02/2478847.html 开启端口:打开“控制面板”中的“Windows防火墙”,点击左侧的“高 ...

  4. .net core, docker 在vs2019开发过程中的问题以及解决办法

    .net core, docker 在vs2019开发过程中的问题以及解决办法 记录下来,帮助Ta人~ 1.vs调试,快Build完后提示Docker 端口:xxxx,xxxx,xxxx占用 解决办法 ...

  5. JS 常用的两个客户端输出方法

    document.write(str)   描述:在网页的<body>标记,输出str的内容.   document意思“文档”,就是整个网页了.   document是一个文档对象,代表 ...

  6. python元组与字典

    一.元组 1.元组的表达 (1,2,3,4) ('olive',123) ("python",) 创建元组: a=tuple((1,2,3,)) b=("python&q ...

  7. P1030 求先序排列 /// 二叉树的遍历

    题目大意: 给一棵树的中序排列 后序排列,求这棵树的先序排列 https://www.luogu.org/problemnew/show/P1030 二叉树的四种遍历解说 几种遍历的递归实现 后序排列 ...

  8. react之可控组件与不可控组件

    一.不可控组件 <input type="text" defaultvalue="Hello React" /> 如上:defaultvalue的值 ...

  9. windows10 vs2019 + opencv 3.4.7环境搭建

    windows vs2019 + opencv 3.4.7环境搭建 安装Opencv 3.4.7 下载 Opencv 第1步 进入 opencv releases 页面,点击 "Window ...

  10. [JZOJ4648] 【NOIP2016提高A组模拟7.17】锦标赛

    题目 描述 题目大意 有nnn个人,你要确定一个出场序列.每次新上台的人就会和擂主打一架,胜利的人继续当擂主.题目给出两两之间打架胜利(失败)的概率. 问111选手坚持到最后的最大概率. 思考历程 看 ...