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. hexo next主题中遇到的关于require的timeout的问题。Uncaught Error: Load timeout for modules:

    个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 背景 报错:Uncaught Error: L ...

  2. day 62 Django基础之jQuery操作cookie

    Django基础之jQuery操作cookie   jquery之cookie操作 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery. ...

  3. 左神算法基础班5_1设计RandomPool结构

    Problem: 设计RandomPool结构 [题目] 设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入. delete(key):将原本在 ...

  4. Caused by: java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties;

    报错信息 Error starting ApplicationContext. To display the auto-configuration report re-run your applica ...

  5. Windows与Linux获取进程集合的方法

    Windows: List<String> tasklist=new ArrayList<String>(); try { Process process = Runtime. ...

  6. 操作系统-Windows操作系统的线程调度了解这些

    Windows操作系统支持内核级线程,调度单位是线程,它采用基于动态优先级的,抢占式调度,并结合时间配额的调整来完成调度 一.几个前提知识点 就绪线程按优先级进入相应的就绪队列 系统总是选择优先级最高 ...

  7. Java学习之程序运行机制

    Java的运行机制是:先编译,后解释. 典型的编译型编程语言是:C和C++. eg:用c语言编写的*.c文件编译生成*.h文件,通过链接将*.h文件链接成*.exe文件,然后就可以运行,编译型的高级语 ...

  8. 透视jvm之垃圾回收

    JVM是JAVA世界的核心,了解它有助于我们更好调试,调优和开发程序,最近散仙在看JAVA特种兵一书,看完觉得,作者写的内容还是挺不错,大家感兴趣的,也可以购买本温故而知新下. 在JVM中,我们经常提 ...

  9. COGITATE | 分析当前热门软件的创新

    热门软件分析实例一——Github [简介] gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub.作为一个分布式的版本控制系统,在Gi ...

  10. SpringCloud学习笔记《---01 概念 ---》篇