Einzelnen Beitrag anzeigen

bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

Austausch von Funktionalität , Interfaces ?

  Alt 21. Jan 2017, 16:40
Ich habe einen Satz von ca. 20 Funktionen in diversen Projekten verwendet. So weit Ok. Nun möchte ich den Code in diesen Projekten nicht anfassen, auch die Funktionsnamen nicht. Allerdings soll durch eine Variable zukünfig gesteuert werden ob der alte Code oder neue Funtionen (selbe Funktionsnamen) aber andere Funktionalität augeführt wird.

aktuelle Idee : alles über Interfaces zu steuern

Delphi-Quellcode:
 unit Unit_interface;

interface

uses classes, types;
type
     IRegistryAccess = interface
     ['{257E3C2E-3601-4FB3-B57C-A7E671EC1B7E}']
       // eine Funktion, gleicher Name aber verschiedene Funktionalitäten
       function ReadInteger (IntegerName : Integer) : Integer ;
     end;

type TRegistryReader = class (TInterfacedObject, IRegistryAccess)
     function ReadInteger (IntegerName : Integer) : Integer ;
end;

type TRegistryFileReader = class (TInterfacedObject, IRegistryAccess)
     function ReadInteger (IntegerName : Integer) : Integer ;
end;

implementation

{ TRegistryReader }

function TRegistryReader.ReadInteger(IntegerName: Integer): Integer;
begin
     Result := -1 ; // test , gebe -1 zurück
end;

{ TRegistryFileReader }

function TRegistryFileReader.ReadInteger(IntegerName: Integer): Integer;
begin
    Result := 333 ; // und hier gebe einen anderen Wert zurück
end;

end.

und hier der Aufruf :


Delphi-Quellcode:
unit UnitMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Unit_interface;

type
  TForm1 = class(TForm)
    btn_GO: TButton;
    CheckBox1: TCheckBox;
    Memo1: TMemo;
    CheckBox2: TCheckBox;
    procedure btn_GOClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Myregistry: IRegistryAccess;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn_GOClick(Sender: TObject);
begin
     if CheckBox2.Checked then
  begin
    Myregistry := TRegistryReader.Create;
  end
  else
  begin
    Myregistry := TRegistryFileReader.Create;
  end;

   memo1.lines.add ( IntToStr( Myregistry.ReadInteger(1 )));
end;

end.

Gibt es einen besseren Ansatz für diese Aufgabe ?

Geändert von bernhard_LA (21. Jan 2017 um 16:57 Uhr)
  Mit Zitat antworten Zitat