一、一个叫声接口和几只鸭子

  1. 从一个叫声接口开始。
  2. {《HeadFirst设计模式》Delphi代码之模式小结 }
  3. { 一个叫声接口                            }
  4. { 编译工具:Delphi2010 for win32          }
  5. { E-Mail :guzh-0417@163.com             }
  6. unit uQuackable;
  7. interface
  8. type
  9. IQuackable = interface(IInterface)
  10. procedure Quack;
  11. end;
  12. implementation
  13. 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、运行结果:

转载于:https://www.cnblogs.com/0x2D-0x22/p/4076468.html

Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]...相关推荐

  1. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]...

    模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override).   1   2{<HeadFirst设计模式>之模板方法模式 }   3{ 编译工具: Del ...

  2. 【Java设计模式 规范与重构】 六 代码重构小结

    最近趁着学习劲头足,如饥似渴的把代码重构部分也学习完了,可以说9月份属实非常充实,貌似也只有学习才能导致生活没有那么无聊. 代码重构博客目录 序号 文章列表 1 [Java设计模式 规范与重构] 一 ...

  3. 研磨23种大话设计模式------动态代理模式 + 小结静态代理模式

    大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 在 ...

  4. HeadFirst设计模式(模式总览速查)

    本文用于记录本人阅读完HeadFirst设计模式一书后对此书的总结,总结系个人理解并简化提炼,方便使用设计模式时速查,如有错漏,请积极指出,本人将虚心接受并及时改正. 1. 策略模式 1.1 使用前提 ...

  5. 【HeadFirst 设计模式总结】1.策略模式

    1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用.进而引出设计原则1:找出应用中可能需要变化之 ...

  6. golang设计模式介绍(内含各个模式的java对比)代码解读

    golang设计模式介绍 设计模式是面向对象软件的经验,是通常设计问题的解决方案,每一种设计模式系统的命名,解释和评价了面向对象中一个重要的和重复出现的设计. 以下一一介绍这些设计模式 1.1工厂设计 ...

  7. Headfirst设计模式的C++实现——策略模式(Strategy)

    前言 最近在学习<Headfirst设计模式>,里面的例子都是Java的.但是我对Java并不熟悉,所以试着用C++来实现书中的例子. 先来看看Duck以及子类 Duck.h 1 #inc ...

  8. 《HeadFirst设计模式》读书笔记-第9章v1-迭代器模式

    定义 迭代器模式(iterator pattern)提供了一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示. 代码实现 下面以JDK现有的Iterator的例子来说明适配器模式使用. ...

  9. headfirst设计模式(2)—观察者模式

    定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察 ...

最新文章

  1. Linux kernel futex.c的bug导致JVM不可用
  2. 灵动微电子逐飞 智能车支持计划汇总
  3. 两个奇技淫巧,将 Docker 镜像体积减小 99%
  4. 我所理解的MVCMVPMVVM
  5. centos linux编译c,紧急提醒!Linux是如何编译C语言程序文件的?CentOS 8的gcc使用方法介绍...
  6. 快速了解上市公司年报
  7. php fpm listen.owner,php-fpm配置解释
  8. mysql最大连接数512_MySQL服务器最大连接数怎么设置才合理
  9. VMware下Ubuntu无法全屏显示问题
  10. 生物效应大数据评估聚类算法的并行优化
  11. 通过链表深入理解Java的引用和对象
  12. Android 实现图片画画板
  13. Java编程思想精彩评注分享之二
  14. web应用转化为saas多租户
  15. filezilla检查新版本mac_filezilla中文版mac下载
  16. C++泛型编程基本概念
  17. 快速健身---马步站桩
  18. 电路定理——替代定理
  19. Java SE核心I
  20. luogu1830 轰炸III

热门文章

  1. 打印机打印网页不清晰_针式打印机不开机故障维修
  2. wireshark 抓包iphone 4g_比4G下续航短2小时,苹果回应iPhone12用5G耗电快:与运营商一道做更多优化工作...
  3. 计算机辅助教学应用论文,高校计算机辅助教学应用论文
  4. html %3ca id=%3e,a.markdown
  5. jsp判断字符串相等_leetcode 86 扰乱字符串(c++)
  6. 无法通过sak判断卡片类型_不同类型人脸识别闸机展示
  7. mysql改国标码_MySQL 优化实施方案
  8. redis分片_5000+字硬核干货!Redis 分布式集群部署实战
  9. idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...
  10. 见识可能比聪明更重要!