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

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

1、从一个叫声接口开始。


 1
 2{《HeadFirst设计模式》Delphi代码之模式小结 }
 3{ 一个叫声接口                            }
 4{ 编译工具:Delphi2010 for win32          }
 5{ E-Mail :[email protected]             }
 6
 7unit uQuackable;
 8
 9interface
10
11type
12  IQuackable = interface(IInterface)
13    procedure Quack;
14  end;
15
16implementation
17
18end.
19

2、几只鸭子实现了该叫声接口。


 1
 2{《HeadFirst设计模式》Delphi代码之模式小结 }
 3{ 几只鸭子实现了声接口                    }
 4{ 编译工具:Delphi2010 for win32         }
 5{ E-Mail :[email protected]            }
 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 :[email protected]            }
 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 :[email protected]               }
 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、运行结果:

时间: 2024-10-06 10:03:12

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

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设计模式》Delphi代码---工厂模式之抽象工厂[转]

 1 2 {<HeadFirst设计模式>工厂模式之抽象工厂 } 3 { 抽象工厂的产品                       } 4 { 编译工具:Delphi7.0                  } 5 { E-Mail :[email protected]          } 6 7unit uPizzaIngredient; 8 9interface1011type12  TDough = class(TObject)13  end;1415  TThinCrustDoug

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代码---模板方法模式之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  TCoffei

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

Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---组合模式之Menus[转]

 1 2{<HeadFirst设计模式>之组合模式 } 3{ 组合与单项的抽象父类           } 4{ 编译工具:Delphi2007 for win32} 5{ E-Mail :[email protected]   } 6 7unit uMenuComponent; 8 9interface1011uses12  SysUtils;1314type15  TMenuComponent = class abstract(TObject)16  public17    procedu

Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]

  1  2{<HeadFirst设计模式>工厂模式之工厂方法 }  3{ 产品类                              }  4{ 编译工具 :Delphi2007 for win32      }  5{ 联系方式 :[email protected]         }  6  7unit uProducts;  8  9interface 10 11type 12  { abstract Pizza } 13 14  TPizza = class abstract(

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter[转]

适配器模式的主要意图是对现有类的接口进行转换,以满足目标类的需求.其次,可以给目标类的接口添加新的行为(主要指方法).这一点容易与装饰模式混淆.从意图方面来看,装饰模式不改变(通常指增加)接口中的行为(主要指方法),而是在原有行为(主要指方法)的基础上添加新的功能:从类结构方面来看,装饰模式中的装饰者既继承又组合被装饰者.类适配器同时继承现有类和目标类,对象适配器继承目标类组合现有类.  1 2{<HeadFirst设计模式>之适配器模式 } 3{ 现有类