zoukankan      html  css  js  c++  java
  • Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]

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

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

     
     
  • 相关阅读:
    SAP CDS view单元测试框架中的访问者(Visitor)设计模式使用介绍
    如何用SAP CRM中间件从ERP下载material division到CRM
    SAP CRM中间件Material Sales Organization和distribution channel的映射逻辑
    SAP CRM 中间件Request download里,遇到/SAPPSPRO/S_MAT_ENHANC_COMM 错误的解决办法
    SAP 数据库表CRMD_ORDERADM_I字段OBJECT_TYPE的计算逻辑
    一文带你了解数据中心大二层网络演进之路
    分布式身份:重新定义你的“身份”管理
    18篇文章系统解读:中台规划如何撬动企业IT基础设施转型升级
    案例展示自定义C函数的实现过程
    云原生2.0时代,华为云DevOps立体运维实践
  • 原文地址:https://www.cnblogs.com/0x2D-0x22/p/4076468.html
Copyright © 2011-2022 走看看