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();

解决方案 »

  1.   

    用接口interface吧!定义变量的话,可能要用到
    initialization
      RegisterClasses([TfrmTruckCost]);

      FindClass('')
      

  2.   

    //看我的代码能不能帮上忙,我觉得有用。
    //刘艺的设计模式改的。
    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.