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

模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override)。


  1
  2{《HeadFirst设计模式》之模板方法模式 }
  3{ 编译工具: Delphi7.0              }
  4{ E-Mail : [email protected]      }
  5
  6unit uCoffeineBeverageWithHook;
  7
  8interface
  9
 10uses
 11  SysUtils;
 12
 13type
 14  TCoffeineBeverageWithHook = class(TObject)
 15  protected
 16    procedure BoilWater;
 17    procedure Brew; virtual; abstract;
 18    procedure PourInCup;
 19    procedure AddCondiments; virtual; abstract;
 20    function CustomerWantsCondiments: Boolean; virtual; { 钩子 }
 21  public
 22    procedure PrepareRecipe; { 模板方法 }
 23  end;
 24
 25  TCoffeeWithHook = class(TCoffeineBeverageWithHook)
 26  private
 27    function GetUserInput: string;
 28  public
 29    procedure Brew; override;
 30    procedure AddCondiments; override;
 31    function CustomerWantsCondiments: Boolean; override;
 32  end;
 33
 34  TTeaWithHook = class(TCoffeineBeverageWithHook)
 35  private
 36    function GetUserInput: string;
 37  public
 38    procedure Brew; override;
 39    procedure AddCondiments; override;
 40    function CustomerWantsCondiments: Boolean; override;
 41  end;
 42
 43implementation
 44
 45{ TCoffeineBeverageWithHook }
 46
 47procedure TCoffeineBeverageWithHook.BoilWater;
 48begin
 49  Writeln(‘Boiling Water‘);
 50end;
 51
 52function TCoffeineBeverageWithHook.CustomerWantsCondiments: Boolean;
 53begin
 54  Result := True;
 55end;
 56
 57procedure TCoffeineBeverageWithHook.PourInCup;
 58begin
 59  Writeln(‘Poiling into cup‘);
 60end;
 61
 62procedure TCoffeineBeverageWithHook.PrepareRecipe;
 63begin
 64  BoilWater;
 65  Brew;
 66  PourInCup;
 67  if CustomerWantsCondiments then
 68    AddCondiments;
 69end;
 70
 71{ TCoffeeWithHook }
 72
 73procedure TCoffeeWithHook.AddCondiments;
 74begin
 75  Writeln(‘Add Sugar and Milk‘);
 76end;
 77
 78procedure TCoffeeWithHook.Brew;
 79begin
 80  Writeln(‘Drip Coffee Through Filter‘);
 81end;
 82
 83function TCoffeeWithHook.CustomerWantsCondiments: Boolean;
 84var
 85  Answer: string;
 86begin
 87  Answer := GetUserInput;
 88  if LowerCase(Answer) = ‘y‘ then
 89    Result := True
 90  else
 91    Result := False;
 92end;
 93
 94function TCoffeeWithHook.GetUserInput: string;
 95var
 96  Answer: string;
 97begin
 98  Answer := ‘‘;
 99  Writeln(‘Would You Like Milk And Sugar With Your Coffee (y / n)? ‘);
100  Readln(Answer);;
101  if Answer = ‘‘ then
102    Result := ‘no‘;
103  Result := Answer;
104end;
105
106{ TTeaWithHook }
107
108procedure TTeaWithHook.AddCondiments;
109begin
110  Writeln(‘Add Lemon‘);
111end;
112
113procedure TTeaWithHook.Brew;
114begin
115  Writeln(‘Steeping the Tea‘);
116end;
117
118function TTeaWithHook.CustomerWantsCondiments: Boolean;
119var
120  Answer: string;
121begin
122  Answer := GetUserInput;
123  if LowerCase(Answer) = ‘y‘ then
124    Result := True
125  else
126    Result := False;
127end;
128
129function TTeaWithHook.GetUserInput: string;
130var
131  Answer: string;
132begin
133  Answer := ‘‘;
134  Writeln(‘Would You Like Lemon With Your Tea (y / n)? ‘);
135  Readln(Answer);
136  if Answer = ‘‘ then
137    Result := ‘no‘;
138  Result := Answer;
139end;
140
141end.
142


 1
 2{《HeadFirst设计模式》之模板方法模式 }
 3{ 客户端                           }
 4{ 编译工具: Delphi7.0              }
 5{ E-Mail : [email protected]      }
 6
 7program pCoffeineBeverageWithHook;
 8
 9{$APPTYPE CONSOLE}
10
11uses
12  SysUtils,
13  uCoffeineBeverageWithHook in ‘uCoffeineBeverageWithHook.pas‘;
14
15var
16  CoffeeHook: TCoffeeWithHook;
17  TeaHook   : TTeaWithHook;
18  
19begin
20  CoffeeHook := TCoffeeWithHook.Create;
21  TeaHook    := TTeaWithHook.Create;
22
23  Writeln(‘Making Coffee‘);
24  CoffeeHook.PrepareRecipe;
25
26  Writeln(‘Making Tea‘);
27  TeaHook.PrepareRecipe;
28
29  FreeAndNil(CoffeeHook);
30  FreeAndNil(TeaHook);
31
32  Readln;
33end.

运行结果:

时间: 2024-08-23 00:53:24

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]的相关文章

设计模式之第3章-模板方法模式(Java实现)

设计模式之第3章-模板方法模式(Java实现) "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场).由美女抽象工厂介绍一下适用场景~大家欢迎 抽象工厂之应用场景 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想显示它们的接口而不是实现时. “人家要讲的就这么多了,接下来还是让今

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂

简单工厂:工厂依据传进的参数创建相应的产品. http://www.cnblogs.com/DelphiDesignPatterns/archive/2009/07/24/1530536.html {<HeadFirst设计模式>工厂模式之简单工厂 } 3{ 产品类 } 4{ 编译工具 :Delphi7.0 } 5{ 联系方式 :[email protected]com } 6 7unit uProducts; 8 9interface 10 11type 12 TPizza = class(

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator[转]

 1 2{<HeadFirst设计模式>之策略模式 } 3{ 本单元中的类为策略类           } 4{ 编译工具: Delphi7.0           } 5{ E-Mail : [email protected]   } 6 7unit uStrategy; 8 9interface1011type12  {飞行接口,及其实现类 }1314  IFlyBehavior = Interface(IInterface)15    procedure Fly;16  end;1718

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---迭代器模式之DinerMenu[转]

容器的主要职责有两个:存放元素和浏览元素.根据单一职责原则(SRP)要将二者分开,于是将浏览功能打包封装就有了迭代器. 用迭代器封装对动态数组的遍历:  1 2{<HeadFirst设计模式>之迭代器模式 } 3{ 容器中的元素类                  } 4{ 编译工具:Delphi7.0             } 5{ E-Mail :[email protected]     } 6 7unit uItem; 8 9interface1011type12  TMenuIte

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之RemoteControlTest[转]

  1  2{<HeadFirst设计模式>之命令模式 }  3{ 本单元中的类为命令的接收者      }  4{ 编译工具 :Delphi7.0         }  5{ 联系方式 :[email protected] }  6  7unit uReceiveObject;  8  9interface 10 11type 12  TLight = class(TObject) 13  private 14    FLocation: String; 15  public 16    c

设计模式(八)之模板方法模式

模板方法模式的定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 当对一个项目进行重构的时候,往往都会把相似的代码进行优化,将其中共同的部分抽取出来,放进一个基类中,这样一说是不是又觉得像一种编程习惯呢.下面用简单.通俗的例子来说明吧. 做Android项目的时候,经常要对访问服务端数据,为了比较好说这个设计模式,我就用android-async-http-1.4.4.jar的开源框架来请求后台,用过这个框架的

java设计模式(9):模板方法模式(TemplateMethod)

一,定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 二,类图: 三,通过小例子讲解: 这个模式一般用在程序的步骤比较多,而且有固定的模式,固定的步骤,而每一步的实现又有多种情况,这是我们可以使用TemplateMethod模式.这样可以保证算法骨架的正确性,又将多态运用的非常好. 这里举个人一天要做的事情吧,假如一个人一天要有起床,吃饭,做事情,睡觉四个事项. 1,首先我们看模板类: [java] 

设计模式(十八)---模板方法模式

1.简介 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑. 不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 2.模板方法结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 代表这些具体逻辑步骤的方法称做基本方法(primitive method):而将这些基本方法汇总起来的方法叫做模板方法(template metho

设计模式13:Template Method 模板方法模式(行为型模式)

Template Method 模板方法模式(行为型模式) 变与不变 变化——是软件永恒的主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现体系中的变化点和稳定点,并使用特定的设计方法来应对这种变化. 动机(Motivation) 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固定的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现. 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期