unit Tpl_meth;
{ Design pattern example - some simple classes using the Template Method pattern. } interface
type TAbstractTemplateClass = class(TObject) protected function Algorithm_StepA: Integer; virtual; abstract; function Algorithm_StepB: Integer; virtual; abstract; function Algorithm_StepC: Integer; virtual; abstract; public function Algorithm: Integer; end;
TConcreteClassA = class(TAbstractTemplateClass) protected function Algorithm_StepA: Integer; override; function Algorithm_StepB: Integer; override; function Algorithm_StepC: Integer; override; end;
TConcreteClassB = class(TAbstractTemplateClass) protected function Algorithm_StepA: Integer; override; function Algorithm_StepB: Integer; override; function Algorithm_StepC: Integer; override; end;
implementation
function TAbstractTemplateClass.Algorithm: Integer; begin Result := Algorithm_StepA + Algorithm_StepB + Algorithm_StepC; end;
function TConcreteClassA.Algorithm_StepA: Integer; begin Result := 1; end;
function TConcreteClassA.Algorithm_StepB: Integer; begin Result := 2; end;
function TConcreteClassA.Algorithm_StepC: Integer; begin Result := 3; end;
function TConcreteClassB.Algorithm_StepA: Integer; begin Result := 4; end;
function TConcreteClassB.Algorithm_StepB: Integer; begin Result := 5; end;
function TConcreteClassB.Algorithm_StepC: Integer; begin Result := 6; end;
end.
/////////////////////////////////////////////////////////////////////////////////
unit Unit1;
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
uses tpl_meth;
procedure TForm1.Button1Click(Sender: TObject); var AnAbstractObject: TAbstractTemplateClass; begin AnAbstractObject := TConcreteClassA.Create; try ShowMessage(''''Algorithm Result = '''' + Inttostr(AnAbstractObject.Algorithm)); finally AnAbstractObject.Destroy; end; end;
procedure TForm1.Button2Click(Sender: TObject); var AnAbstractObject: TAbstractTemplateClass; begin AnAbstractObject := TConcreteClassB.Create; try ShowMessage(''''Algorithm Result = '''' + Inttostr(AnAbstractObject.Algorithm)); finally AnAbstractObject.Destroy; end; end;
end.
[系统软件]InstallShield Express for delphi制作安装程序定… [系统软件]The GRETA Regular Expression Template Archive [常用软件]InstallShield Express制作Delphi数据库安装程序 [Delphi程序]为什么选择Delphi.Net ? [Delphi程序]《关于VisiBroker For Delphi的使用》(4) [Delphi程序]Delphi 程序员代码编写标准指南 [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro… [Delphi程序]Borland Delphi 9 的新特性 [Delphi程序]Delphi 键盘码表 [Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗?
|