TObj=Class(TOBject)
function gogo():boolean;visrib;
end;
TSubstObj1=class(TObj)
function gogo():boolean; override;
end;
TsubstObj2=class(TOBj)
function gogo():boolean; override;
function gogo1():boolean;
end;问题如下:在程序中定义类变量Oj后,我想跟据不同的情况使不同的类变量定义到不同的类上。if a then oj:=TsubstObj1.create;
if b then oj:=Tsubstobj2.create;那么oj,就定义为那个类变量呢: var oj:TObj.....?????
在程序的另外实现部分我都用 oj.gogo(); 或 oj.gogo1();
function gogo():boolean;visrib;
end;
TSubstObj1=class(TObj)
function gogo():boolean; override;
end;
TsubstObj2=class(TOBj)
function gogo():boolean; override;
function gogo1():boolean;
end;问题如下:在程序中定义类变量Oj后,我想跟据不同的情况使不同的类变量定义到不同的类上。if a then oj:=TsubstObj1.create;
if b then oj:=Tsubstobj2.create;那么oj,就定义为那个类变量呢: var oj:TObj.....?????
在程序的另外实现部分我都用 oj.gogo(); 或 oj.gogo1();
initialization
RegisterClasses([TfrmTruckCost]);
和
FindClass('')
//刘艺的设计模式改的。
procedure TForm1.BitBtn1Click(Sender: TObject); 调用 TStandardFormMaker的 Test
procedure TForm1.BitBtn2Click(Sender: TObject); 调用 TArtFormMaker 的 Testunit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;type
//产品类1:Button
TStandardButton = class (TButton)
end; TArtButton = class (TBitBtn)
end;
(* IButton = interface (IInterface) TButtonControl
['{012EA2E3-13BB-4A70-834A-DDA682BCD7C3}']
end; TStandardButton = class (TButton, IButton)
end; TArtButton = class (TBitBtn, IButton)
end; *) //工厂类:
TFormMaker = class (TObject)
public
(* function CreateButton( vText : string; vTop : Integer;
vLeft : Integer): TButtonControl; virtual; abstract; *)
procedure Test; virtual; abstract;
end;
TStandardFormMaker = class (TFormMaker)
public
(* function CreateButton( vText : string; vTop : Integer;
vLeft : Integer): TButtonControl; override; *)
procedure Test; override;
end;
TArtFormMaker = class (TFormMaker)
public
(* function CreateButton( vText : string; vTop : Integer;
vLeft : Integer): TButtonControl; override; *)
procedure Test; override;
end; TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Panel1: TPanel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
FFormMaker:TFormMaker;
public
{ Public declarations }
procedure CreateForm(Factory:TFormMaker;title:String);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TStandardFormMaker.Test;
begin
showMessage('TStandardFormMaker.Test');
end;(* function TStandardFormMaker.CreateButton(vText : string;
vTop : Integer; vLeft : Integer): TButtonControl;
begin
showMessage('TStandardFormMaker.CreateButton');
end; *)procedure TArtFormMaker.Test;
begin
showMessage('TArtFormMaker.Test');
end;(* function TArtFormMaker.CreateButton(vText : string; vTop
: Integer; vLeft : Integer): TButtonControl;
begin
showMessage('TArtFormMaker.CreateButton');
end; *)procedure TForm1.CreateForm(Factory:TFormMaker;title:String);
begin
//Factory.CreateButton( 'OK', 110, 120 );
Factory.Test;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
var
StandardFormMaker:TStandardFormMaker;
begin
FFormMaker:=TStandardFormMaker.Create;
try
CreateForm(FFormMaker,'标准型对话框');
finally
FFormMaker.Free;
end;
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
FFormMaker:=TArtFormMaker.Create;
try
CreateForm(FFormMaker,'艺术型对话框');
finally
FFormMaker.Free;
end;
end;end.