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. LUOGU P4253 [SCOI2015]小凸玩密室(树形dp)

    传送门 解题思路 玄学树形\(dp\),题目描述极其混乱...看错了两次题,设首先根据每次必须点完子树里的灯才能点别的,那么点灯情况只有两种,第一种是点到某一个祖先,第二种是点到某一个祖先的兄弟.所以 ...

  2. csp-s模拟测试90

    csp-s模拟测试90 考场发明$Spfa$祭. $T1$按照题意模拟,然后我就发现我死了.一气之下删掉了$priority$,拍了几下发现贼jb快而且还是对的就开心地交了.$T2$的差分状态定义很棒 ...

  3. NOIP2016 解题报告

    D1T1 玩具谜题 xjb模拟即可 #include<bits/stdc++.h> #define N (100000+5) using namespace std; inline int ...

  4. VS2010-MFC(菜单:菜单及CMenu类的使用)

    转自:http://www.jizhuomi.com/software/212.html 上一节讲的是VS2010的菜单资源,本节主要讲菜单及CMenu类的使用. CMenu类的主要成员函数 MFC为 ...

  5. VS2010-MFC(常用控件:静态文本框)

    转自:http://www.jizhuomi.com/software/179.html 关于对话框的使用和各种通用对话框的介绍就到此为止,从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文 ...

  6. 关于延迟加载(lazy)和强制加载(Hibernate.initialize(Object proxy) )

    PO 即Persistence Object VO 即Value Object PO 和VO 是Hibernate 中两个比较关键的概念. 首先,何谓VO,很简单,VO 就是一个简单的值对象. 如:  ...

  7. Celery - 异步任务 , 定时任务 , 周期任务

    1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由    1.用户任务 app    2.管道 broker 用于存储 ...

  8. <每日一题>题目1:简单的注册和登录1.0

    #版本1.0,最基本的注册登录'''1.注册,将账号和密码分别写在不同的文档里面2.登录,分别从账户文档和密码文档进行读取并登录''' #注册 Identity = input("请输入您想 ...

  9. RunLoop运行循环机制

    http://www.jianshu.com/p/0be6be50e461 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存空间内,比 ...

  10. Python全栈开发:html标签

    Html是什么? htyper text markup language 即超文本标记语言 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. ...