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 ?