Obsluga kilku podobnych obiektow

0

Witam
Mam pewien problem. Mam kilka obiektów które dziedziczą po tej samej klasie, obiekty dodatkowo maja dwie nowe funkcje, a w programie jest button i combobox i zależnie od wyboru użytkownika jest tworzony obiekt po naciśnięciu przycisku. Jak dla mnie metoda nie jest idealna. Obrazując w dużym skrócie:

TBase = class
   public
     function Base: Boolean;
end;

TObject1 = class (TBase)
  public
     iWynik: Integer;
     procedure Test1(iInput: Integer);
     procedure Test2(iInput: Integer);
end;

TObject1 = class (TBase)
  public
     iWynik: Integer;
     procedure Test1(iInput: Integer);
     procedure Test2(iInput: Integer);
end;

procedure TObject1.Test1(iInput: Integer);
begin
  iWynik := iInput * 2 + iInput div 4;
end;

procedure TObject1.Test2(iInput: Integer);
begin
  iWynik := iInput + 100;
end; 

procedure TObject2.Test1(iInput: Integer);
begin
  iWynik := iInput shl 4 + 3;
end;

procedure TObject2.Test2(iInput: Integer);
begin
  iWynik := iInput div 3;
end; 

procedure TfrmMain.Button1(Sender: TObject)
begin
  case combobox1.itemIndex of 
  0:
    begin
       if not Assigned(Object1) then
          Object1 := TObject1.Create;
       Object1.Test1(StrToInt(Edit1.Text));
       Object1.Test2(123);
       Object1.Base;
    end;
  1:
    begin
       if not Assigned(Object2) then
          Object2 := TObject2.Create;
       Object2.Test1(StrToInt(Edit1.Text));
       Object2.Test2(123);
       Object2.Base;
    end;
   end;
end;

Oczywiście tych obiektów jest więcej.
Ma ktoś pomysł jak to inaczej rozwiązać?

0

Jakoś tak:

TBase = class(TObject)
   public
     function Base: Boolean;
     procedure Test1(iInput: Integer); virtual; abstract;
     procedure Test2(iInput: Integer); virtual; abstract;
end;

TMyBase = class of TBase;

TObject1 = class(TBase)
  public
     iWynik: Integer;
     procedure Test1(iInput: Integer); override;
     procedure Test2(iInput: Integer); override;
end;

TObject2 = class (TBase)
  public
     iWynik: Integer;
     procedure Test1(iInput: Integer); override;
     procedure Test2(iInput: Integer); override;
end;

//ciach

procedure TForm1.Button1Click(Sender: TObject);
const
  MYOBJECTS: array[0..1] of TMyBase = (TObject1, TObject2);
var
  obj: TBase;
begin
  obj:= MYOBJECTS[ComboBox1.itemIndex].Create;
  obj.Test1(StrToInt(Edit1.Text));
  obj.Test2(123);
  obj.Base;
  obj.Free;
end;
0

Dzięki. Właśnie o to mi chodziło. Działa super.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1