Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]
一、一个叫声接口和几只鸭子
- 从一个叫声接口开始。
- {《HeadFirst设计模式》Delphi代码之模式小结 }
- { 一个叫声接口 }
- { 编译工具:Delphi2010 for win32 }
- { E-Mail :guzh-0417@163.com }
- unit uQuackable;
- interface
- type
- IQuackable = interface(IInterface)
- procedure Quack;
- end;
- implementation
- end.
2、几只鸭子实现了该叫声接口。
1
2{《HeadFirst设计模式》Delphi代码之模式小结 }
3{ 几只鸭子实现了声接口 }
4{ 编译工具:Delphi2010 for win32 }
5{ E-Mail :guzh-0417@163.com }
6
7unit uDuck;
8
9interface
10
11uses
12 uQuackable;
13
14type
15 TMallardDuck = class(TInterfacedObject, IQuackable)
16 public
17 procedure Quack;
18 end;
19
20 TRedHeadDuck = class(TInterfacedObject, IQuackable)
21 public
22 procedure Quack;
23 end;
24
25 TDuckCall = class(TInterfacedObject, IQuackable)
26 public
27 procedure Quack;
28 end;
29
30 TRubberDuck = class(TInterfacedObject, IQuackable)
31 public
32 procedure Quack;
33 end;
34
35implementation
36
37{ TMallardDuck }
38
39procedure TMallardDuck.Quack;
40begin
41 Writeln('Quack');
42end;
43
44{ TRedHeadDuck }
45
46procedure TRedHeadDuck.Quack;
47begin
48 Writeln('Quack');
49end;
50
51{ TDuckCall }
52
53procedure TDuckCall.Quack;
54begin
55 Writeln('Kwak');
56end;
57
58{ TRubberDuck }
59
60procedure TRubberDuck.Quack;
61begin
62 Writeln('Squeak');
63end;
64
65end.
3、叫声接口为鸭鸣器提供服务。叫声接口与鸭鸣器的关系比与它的实现类更密切。
1
2{《HeadFirst设计模式》Delphi代码之模式小结 }
3{ 鸭鸣模拟器 }
4{ 编译工具:Delphi2010 for win32 }
5{ E-Mail :guzh-0417@163.com }
6
7unit uDuckSimulator;
8
9interface
10
11uses
12 uQuackable, uDuck;
13
14type
15 TDuckSimulator = class(TObject)
16 private
17 procedure Simulate(aDuck: IQuackable); overload;
18 public
19 procedure Simulate; overload;
20 end;
21
22implementation
23
24{ TDuckSimulator }
25
26procedure TDuckSimulator.Simulate(aDuck: IQuackable); { 此处交给多态处理 }
27begin
28 aDuck.Quack;
29end;
30
31procedure TDuckSimulator.Simulate;
32var
33 aMallardDuck: IQuackable;
34 aRedHeadDuck: IQuackable;
35 aDuckCall : IQuackable;
36 aRubberDuck : IQuackable;
37begin
38 try
39 { 创建鸭鸣实例 }
40 aMallardDuck := TMallardDuck.Create;
41 aRedHeadDuck := TRedHeadDuck.Create;
42 aDuckCall := TDuckCall.Create;
43 aRubberDuck := TRubberDuck.Create;
44
45 Writeln('Duck Simulator');
46
47 { 模拟鸭鸣 }
48 Simulate(aMallardDuck);
49 Simulate(aRedHeadDuck);
50 Simulate(aDuckCall);
51 Simulate(aRubberDuck );
52 finally
53 aMallardDuck := nil;
54 aRedHeadDuck := nil;
55 aDuckCall := nil;
56 aRubberDuck := nil;
57 end;
58end;
59
60end.
4、客户端。
1
2{《HeadFirst设计模式》Delphi代码之模式小结 }
3{ 客户端 }
4{ 编译工具:Delphi2010 for win32 }
5{ E-Mail :guzh-0417@163.com }
6
7program pDuckSimulator;
8
9{$APPTYPE CONSOLE}
10
11uses
12 uDuck in 'uDuck.pas',
13 uDuckSimulator in 'uDuckSimulator.pas',
14 uQuackable in 'uQuackable.pas';
15
16var
17 aSimulator: TDuckSimulator;
18
19begin
20 aSimulator := TDuckSimulator.Create;
21
22 aSimulator.Simulate;
23
24 aSimulator.Free;
25
26 Readln;
27end.
5、运行结果:
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设计模式》Delphi2007代码---组合模式之Menus[转]
1 2{<HeadFirst设计模式>之组合模式 } 3{ 组合与单项的抽象父类 } 4{ 编译工具:Delphi2007 for win32} 5{ E-M ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]
1 2{<HeadFirst设计模式>工厂模式之工厂方法 } 3{ 产品类 } 4{ 编译工具 :Delphi20 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]
模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override). 1 2{<HeadFirst设计模式>之模板方法模式 } 3{ 编译工具: Del ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---迭代器模式之DinerMenu[转]
容器的主要职责有两个:存放元素和浏览元素.根据单一职责原则(SRP)要将二者分开,于是将浏览功能打包封装就有了迭代器. 用迭代器封装对动态数组的遍历: 1 2{<HeadFirst设计模式& ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator[转]
1 2{<HeadFirst设计模式>之策略模式 } 3{ 本单元中的类为策略类 } 4{ 编译工具: Delphi7.0 } 5{ E- ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之RemoteControlTest[转]
1 2{<HeadFirst设计模式>之命令模式 } 3{ 本单元中的类为命令的接收者 } 4{ 编译工具 :Delphi7.0 } 5{ 联 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler[转]
1 2{<HeadFirst设计模式>之单例模式 } 3{ 编译工具: Delphi2007 for win32 } 4{ E-Mail : guzh-0417@163.com ...
随机推荐
- python 集合(set)
1.集合的创建 集合是一个无序不重复元素的集.基本功能包括关系测试和消除重复元素. 创建集合:大括号或 set() 函数可以用来创建集合.注意:想要创建空集合,你必须使用 set() 而不是 {},后 ...
- k8s 弹性伸缩
k8s弹性伸缩,需要附加插件heapster 1.安装heapster监控 1:上传并导入镜像,打标签 ls *.tar.gz for n in `ls *.tar.gz`;do docker loa ...
- 手把手教你 GitLab 的安装及使用(转)
深山田 关注 2018.01.30 22:58 字数 1696 阅读 15559评论 2喜欢 15 前言 新入职公司,发现公司还在使用落后生产工具 svn,由于重度使用过 svn 和 git ,知道这 ...
- linux内核参数sysctl.conf,TCP握手ack,洪水攻击syn,超时关闭wait(转)
http://www.xshell.net/linux/Linux_sysctl_conf.html 优化Linux内核sysctl.conf参数来提高服务器并发处理能力 Posted by 破冰 o ...
- Java中循环体的初步了解以及另一种随机数的获取方法
Math中的相关操作 随机数 Java中除了可以直接导入Random类,获取随机数,还可以通过本身自带的Math方法去获取随机数.Math.random()可以产生随机小数,区间范围为[0.0,1.0 ...
- img属性src的特点
img属性src的特点: src=“图片地址” 成功则加载图片,失败则显示alt文字和断裂的图片 src="" 则不加载,不显示alt文字和断裂的图片 因此当图片加载失败后,$(& ...
- 阶梯nim游戏
阶梯nim游戏有n个阶梯,0-n-1,每个阶梯上有一堆石子,编号为i的阶梯上的石子只能移动到i-1上去,每次至少移动一个,最后所有的石子都移动到0号阶梯上了.结论:奇数阶梯上的石子异或起来,要是0,就 ...
- vue element传的值报_self.$scopedSlots.default is not a function
问题描述:使用表格时做了v-if判断:首次渲染没有问题:反复操作便会报错: 解决办法:el-table上给v-if的 el-table-colunm 加上:key="Math.random( ...
- 从微服务治理的角度看RSocket、. Envoy和. Istio
很多同学看到这个题目,一定会提这样的问题:RSocket是个协议,Envoy是一个 proxy,Istio是service mesh control plane + data plane. 这三种技术 ...
- iPhone开发关于UDID和UUID的一些理解
一.UDID(Unique Device Identifier) UDID是Unique Device Identifier的缩写,中文意思是设备唯一标识. 在很多需要限制一台设备一个账号的应用中 ...