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、运行结果:
转载于:https://www.cnblogs.com/0x2D-0x22/p/4076468.html
Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]...相关推荐
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]...
模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override). 1 2{<HeadFirst设计模式>之模板方法模式 } 3{ 编译工具: Del ...
- 【Java设计模式 规范与重构】 六 代码重构小结
最近趁着学习劲头足,如饥似渴的把代码重构部分也学习完了,可以说9月份属实非常充实,貌似也只有学习才能导致生活没有那么无聊. 代码重构博客目录 序号 文章列表 1 [Java设计模式 规范与重构] 一 ...
- 研磨23种大话设计模式------动态代理模式 + 小结静态代理模式
大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 在 ...
- HeadFirst设计模式(模式总览速查)
本文用于记录本人阅读完HeadFirst设计模式一书后对此书的总结,总结系个人理解并简化提炼,方便使用设计模式时速查,如有错漏,请积极指出,本人将虚心接受并及时改正. 1. 策略模式 1.1 使用前提 ...
- 【HeadFirst 设计模式总结】1.策略模式
1.书中举了一个鸭子类的设计,有些会飞或者会叫,有些不会飞可能也不会叫,用继承则导致不该有的功能通过继承而继承了下来,使用接口则代码无法做到最大程度的重用.进而引出设计原则1:找出应用中可能需要变化之 ...
- golang设计模式介绍(内含各个模式的java对比)代码解读
golang设计模式介绍 设计模式是面向对象软件的经验,是通常设计问题的解决方案,每一种设计模式系统的命名,解释和评价了面向对象中一个重要的和重复出现的设计. 以下一一介绍这些设计模式 1.1工厂设计 ...
- Headfirst设计模式的C++实现——策略模式(Strategy)
前言 最近在学习<Headfirst设计模式>,里面的例子都是Java的.但是我对Java并不熟悉,所以试着用C++来实现书中的例子. 先来看看Duck以及子类 Duck.h 1 #inc ...
- 《HeadFirst设计模式》读书笔记-第9章v1-迭代器模式
定义 迭代器模式(iterator pattern)提供了一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示. 代码实现 下面以JDK现有的Iterator的例子来说明适配器模式使用. ...
- headfirst设计模式(2)—观察者模式
定义 观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察 ...
最新文章
- Linux kernel futex.c的bug导致JVM不可用
- 灵动微电子逐飞 智能车支持计划汇总
- 两个奇技淫巧,将 Docker 镜像体积减小 99%
- 我所理解的MVCMVPMVVM
- centos linux编译c,紧急提醒!Linux是如何编译C语言程序文件的?CentOS 8的gcc使用方法介绍...
- 快速了解上市公司年报
- php fpm listen.owner,php-fpm配置解释
- mysql最大连接数512_MySQL服务器最大连接数怎么设置才合理
- VMware下Ubuntu无法全屏显示问题
- 生物效应大数据评估聚类算法的并行优化
- 通过链表深入理解Java的引用和对象
- Android 实现图片画画板
- Java编程思想精彩评注分享之二
- web应用转化为saas多租户
- filezilla检查新版本mac_filezilla中文版mac下载
- C++泛型编程基本概念
- 快速健身---马步站桩
- 电路定理——替代定理
- Java SE核心I
- luogu1830 轰炸III
热门文章
- 打印机打印网页不清晰_针式打印机不开机故障维修
- wireshark 抓包iphone 4g_比4G下续航短2小时,苹果回应iPhone12用5G耗电快:与运营商一道做更多优化工作...
- 计算机辅助教学应用论文,高校计算机辅助教学应用论文
- html %3ca id=%3e,a.markdown
- jsp判断字符串相等_leetcode 86 扰乱字符串(c++)
- 无法通过sak判断卡片类型_不同类型人脸识别闸机展示
- mysql改国标码_MySQL 优化实施方案
- redis分片_5000+字硬核干货!Redis 分布式集群部署实战
- idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...
- 见识可能比聪明更重要!