• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi设计模式:《HeadFirst设计模式》Delphi代码---模式小结之加入适配器模式 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

二、加入适配器模式

 

1、鹅也要加入鸭鸣模拟器

 

代码
1 {《HeadFirst设计模式》Delphi代码之模式小结 }
2 { 加入适配器模式 }
3 { 编译工具:Delphi2010 for win32 }
4 { E-Mail :[email protected] }
5
6  unit uGoose;
7
8  interface
9
10  type
11 TGoose = class(TObject)
12 public
13 procedure Honk;
14 end;
15
16  implementation
17
18  { TGoose }
19
20  procedure TGoose.Honk;
21  begin
22 Writeln('Honk');
23  end;
24
25  end.

 

2、但鹅的叫声接口与鸭子的不一致,鹅变量的类型与procedure Simulate(aDuck: IQuackable)要求的不一致。加入适配器转换鹅的接口,同时也保持了procedure Simulate(aDuck: IQuackable)对多态的要求。

 

代码
1 {《HeadFirst设计模式》Delphi代码之模式小结 }
2 { 加入适配器模式 }
3 { 编译工具:Delphi2010 for win32 }
4 { E-Mail :[email protected] }
5
6  unit uGooseAdapter;
7
8  interface
9
10  uses
11 uQuackable, uGoose;
12
13 type
14 TGooseAdapter = class(TInterfacedObject, IQuackable)
15 private
16 FGoose: TGoose;
17 public
18 constructor Create(aGoose: TGoose);
19 destructor Destroy; override;
20 procedure Quack;
21 end;
22
23 implementation
24
25 { TGooseAdapter }
26
27 constructor TGooseAdapter.Create(aGoose: TGoose);
28 begin
29 FGoose := aGoose;
30 end;
31
32 destructor TGooseAdapter.Destroy;
33 begin
34 FGoose.Free;
35 inherited Destroy;
36 end;
37
38 procedure TGooseAdapter.Quack;
39 begin
40 FGoose.Honk;
41 end;
42
43 end.

 

3、最后测试一下

 

代码
1 {《HeadFirst设计模式》Delphi代码之模式小结 }
2 { 测试 }
3 { 编译工具:Delphi2010 for win32 }
4 { E-Mail :[email protected] }
5
6 unit uDuckSimulator;
7
8 interface
9
10 uses
11 uQuackable, uDuck, uGoose, uGooseAdapter;
12
13 type
14 TDuckSimulator = class(TObject)
15 private
16 procedure Simulate(aDuck: IQuackable); overload;
17 public
18 procedure Simulate; overload;
19 end;
20
21 implementation
22
23 { TDuckSimulator }
24
25 procedure TDuckSimulator.Simulate(aDuck: IQuackable);
26 begin
27 aDuck.Quack;
28 end;
29
30 procedure TDuckSimulator.Simulate;
31 var
32 aMallardDuck: IQuackable;
33 aRedHeadDuck: IQuackable;
34 aDuckCall : IQuackable;
35 aRubberDuck : IQuackable;
36 aGooseDuck : IQuackable;
37 begin
38 try
39 aMallardDuck := TMallardDuck.Create;
40 aRedHeadDuck := TRedHeadDuck.Create;
41 aDuckCall := TDuckCall.Create;
42 aRubberDuck := TRubberDuck.Create;
43 aGooseDuck := TGooseAdapter.Create(TGoose.Create);
44
45 Writeln('Duck Simulator: With Goose Adapter');
46
47 Simulate(aMallardDuck);
48 Simulate(aRedHeadDuck);
49 Simulate(aDuckCall);
50 Simulate(aRubberDuck);
51 Simulate(aGooseDuck );
52 finally
53 aMallardDuck := nil;
54 aRedHeadDuck := nil;
55 aDuckCall := nil;
56 aRubberDuck := nil;
57 aGooseDuck := nil;
58 end;
59 end;
60
61 end.

 

代码
1 {《HeadFirst设计模式》Delphi代码之模式小结 }
2 { 客户端 }
3 { 编译工具:Delphi2010 for win32 }
4 { E-Mail :[email protected] }
5
6 program pDuckSimulator;
7
8 {$APPTYPE CONSOLE}
9
10 uses
11 uQuackable in 'uQuackable.pas',
12 uDuck in 'uDuck.pas',
13 uDuckSimulator in 'uDuckSimulator.pas',
14 uGooseAdapter in 'uGooseAdapter.pas',
15 uGoose in 'uGoose.pas';
16
17 var
18 aSimulator: TDuckSimulator;
19
20 begin
21 aSimulator := TDuckSimulator.Create;
22
23 aSimulator.Simulate;
24
25 aSimulator.Free;
26
27 Readln;
28 end.

 

4、运行结果:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi实体类JSON数组TJsonSerializerDeserialize发布时间:2022-07-18
下一篇:
DelphiRxRichEdit高级操作发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap