Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter[转]
适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求。其次,可以给目标类的接口添加新的行为(主要指方法)。这一点容易与装饰模式混淆。从意图方面来看,装饰模式不改变(通常指增加)接口中的行为(主要指方法),而是在原有行为(主要指方法)的基础上添加新的功能;从类结构方面来看,装饰模式中的装饰者既继承又组合被装饰者。类适配器同时继承现有类和目标类,对象适配器继承目标类组合现有类。
1
2{《HeadFirst设计模式》之适配器模式 }
3{ 现有类 }
4{ 编译工具:Delphi7.0 }
5{ E-Mail :guzh-0417@163.com }
6
7unit uAdaptee;
8
9interface
10
11type
12 TTurkey = class(TObject)
13 public
14 procedure Gobble; virtual; abstract;
15 procedure Fly; virtual; abstract;
16 end;
17
18 TWildTurkey = class(TTurkey)
19 public
20 procedure Gobble; override;
21 procedure Fly; override;
22 end;
23
24implementation
25
26{ TWildTurkey }
27
28procedure TWildTurkey.Fly;
29begin
30 Writeln('I''m flying a short distance.');
31end;
32
33procedure TWildTurkey.Gobble;
34begin
35 Writeln('Gobble gobble.');
36end;
37
38end.
1
2{《HeadFirst设计模式》之适配器模式 }
3{ 目标类 }
4{ 编译工具:Delphi7.0 }
5{ E-Mail :guzh-0417@163.com }
6
7unit uTarget;
8
9interface
10
11type
12 TDuck = class(TObject)
13 public
14 procedure Quack; virtual; abstract;
15 procedure Fly; virtual; abstract;
16 end;
17
18 TMallarDuck = class(TDuck)
19 public
20 procedure Quack; override;
21 procedure Fly; override;
22 end;
23
24implementation
25
26{ TMallarDuck }
27
28procedure TMallarDuck.Fly;
29begin
30 Writeln('I''m flying.');
31end;
32
33procedure TMallarDuck.Quack;
34begin
35 Writeln('Quack.');
36end;
37
38end.
1
2{《HeadFirst设计模式》之适配器模式 }
3{ 适配器,转换现有类的接口 }
4{ 编译工具:Delphi7.0 }
5{ E-Mail :guzh-0417@163.com }
6
7unit uAdapter;
8
9interface
10
11uses
12 uTarget, uAdaptee;
13
14type
15 TTurkeyAdapter = class(TDuck)
16 private
17 FTurkey: TTurkey;
18 public
19 constructor Create(aTurkey: TTurkey);
20 procedure Quack; override;
21 procedure Fly; override;
22 end;
23
24implementation
25
26{ TTurkeyAdapter }
27
28constructor TTurkeyAdapter.Create(aTurkey: TTurkey);
29begin
30 FTurkey := aTurkey;
31end;
32
33procedure TTurkeyAdapter.Fly;
34var
35 i: Integer;
36begin
37 for i := 0 to 4 do
38 begin
39 FTurkey.Fly;
40 end;
41end;
42
43procedure TTurkeyAdapter.Quack;
44begin
45 FTurkey.Gobble;
46end;
47
48end.
1
2{《HeadFirst设计模式》之适配器模式 }
3{ 客户端 }
4{ 编译工具:Delphi7.0 }
5{ E-Mail :guzh-0417@163.com }
6
7program pDuckTestDrive;
8
9{$APPTYPE CONSOLE}
10
11uses
12 SysUtils,
13 uAdaptee in 'uAdaptee.pas',
14 uAdapter in 'uAdapter.pas',
15 uTarget in 'uTarget.pas';
16
17var
18 Duck : TMallarDuck;
19 Turkey: TWildTurkey;
20 TurkeyAdapter: TTurkeyAdapter;
21
22procedure TestDuck(aDuck: TDuck);
23begin
24 aDuck.Quack;
25 aDuck.Fly;
26end;
27
28begin
29 Duck := TMallarDuck.Create;
30 Turkey := TWildTurkey.Create;
31 TurkeyAdapter := TTurkeyAdapter.Create(Turkey);
32
33 Writeln('The turkey says:');
34 Turkey.Gobble;
35 Turkey.Fly;
36
37 Writeln;
38
39 Writeln('The duck says:');
40 TestDuck(Duck);
41
42 Writeln;
43
44 Writeln('The turkeyAdapter says:');
45 TestDuck(TurkeyAdapter);
46
47 FreeAndNil(Duck);
48 FreeAndNil(Turkey);
49 FreeAndNil(TurkeyAdapter);
50
51 Readln;
52end.
运行结果:
Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter[转]的更多相关文章
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂
简单工厂:工厂依据传进的参数创建相应的产品. http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html { ...
- 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代码---策略模式之MiniDuckSimulator[转]
1 2{<HeadFirst设计模式>之策略模式 } 3{ 本单元中的类为策略类 } 4{ 编译工具: Delphi7.0 } 5{ E- ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]
1 2{<HeadFirst设计模式>之装饰模式 } 3{ 本单元中的类为被装饰者 } 4{ 编译工具: Delphi7.0 } 5{ E-Ma ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之RemoteControlTest[转]
1 2{<HeadFirst设计模式>之命令模式 } 3{ 本单元中的类为命令的接收者 } 4{ 编译工具 :Delphi7.0 } 5{ 联 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]
一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口 } ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]
1 2 {<HeadFirst设计模式>工厂模式之抽象工厂 } 3 { 抽象工厂的产品 } 4 { 编译工具:Delphi7.0 ...
随机推荐
- csp-s模拟测试54x,y,z题解
题面:https://www.cnblogs.com/Juve/articles/11606834.html x: 并差集,把不能分到两个集合里的元素和并到一起,设连通块个数为cnt,则答案为:$2^ ...
- 常见的HTTP状态码详细解析
http状态码分为五类 : 1XX 信息 服务器收到请求,需要请求者继续操作 2XX 成功 请求被成功接手并返回给请求者 3XX 重定向 需要进一步操作才能完成请求 4XX 客户端错误 请求包含语法错 ...
- We'll be fine.
可怜的人心中都有一种信念,那就是 明天会更好. Everything will be fine. 我拥见风来,嗅见花开,是避不掉的厉寒,是止不住的徘徊.
- 微信小程序连续旋转动画this.animation.rotate
一..js中封装旋转动画方法 添加animation属性 data:{ animation:''" } 改变animation的值(官网提供角度范围是-180~180,但是我发现角度越大会一 ...
- Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析
Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析 今天主要讲述的内容是关于决策树的知识,主要包括以下内容:1.分类及决策树算法介绍2.鸢尾花卉数据集介绍3.决策树实现鸢尾数据集分析.希望这篇 ...
- 05_springmvc参数绑定
一.参数绑定的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接收.而不 ...
- Neo4j删除节点和关系、彻底删除节点标签名
https://www.jianshu.com/p/59bd829de0de 总结提前: [1]先删关系,再删节点 [2]当记不得关系名时,type(r)可以查到关系名 [3]彻底删除节点标签名,需要 ...
- 关于obj文件的理解
编译器先编译.cpp为obj文件,看看文件内有没有冲突,然后再进行链接,链接头文件引入的lib库等等,然后就生成exe文件了,下面这个图说的很好:
- zimage 和bzimage 有什么区别
在网络中,不少服务器采用的是Linux系统.为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核.编译Linux 内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的 ...
- Windows API 23 篇 WTSQuerySessionInformation
函数原型:BOOLWINAPIWTSQuerySessionInformationW( IN ...