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[转]
适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为 ...
随机推荐
- SqlSugar入门级教程+实例 (.net core下的)
官方参考:http://www.codeisbug.com/Doc/8 前言:这应该是目前最好用的ORM框架之一了,而且支持.net core,网上除了官方文档其他参考就少了点,自己整理了一下,大致包 ...
- ssm下使用分页插件PageHelper进行分页
1. 导入maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId ...
- char类型在传参时接收不到数据的原因
mybatis的原因!!!!! 数据库这个样子 在postman中调用接口:SQL select * from T_TRAIN_MARSHALLING where TRAIN_NUM is null ...
- day 73 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...
- 一次完整的HTTP请求与响应涉及哪些知识?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:Ruheng 地址:http://www.jianshu.com/p/c1d6a294d3c0 本文以HTTP请求和响 ...
- LeetCode 19.删除链表的倒数第N个节点(Python)
题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点 ...
- array_map、array_walk、array_filter三个函数的区别
array_walk --- 使自定的函数能处理数组的每个元素 bool array_walk ( array &array, callback funcname [, mixed userd ...
- html-圣杯布局
1.两边固定 当中自适应 2.当中列要完整显示 3.当中列要优先加载 浮动: 搭建完整的布局框架 margin 为赋值:调整旁边两列的位置(使三列布局到一行上) 使用相对定位:调整旁边两列的位置(使两 ...
- 设置IDEA中properties文件显示中文
路径: File - Setting - Editor - Code Style - File Encodings
- 廖雪峰Java11多线程编程-3高级concurrent包-6ExecutorService
Java语言内置多线程支持: 创建线程需要操作系统资源(线程资源,栈空间) 频繁创建和销毁线程需要消耗大量时间 如果可以复用一个线程 线程池: 线程池维护若干个线程,处于等待状态 如果有新任务,就分配 ...