aktuell würde der Code wieder machen was er soll :
Delphi-Quellcode:
TForm1 = class(TForm)
btn_GO: TButton;
CheckBox1: TCheckBox;
Memo1: TMemo;
CheckBox2: TCheckBox;
procedure btn_GOClick(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn_GOClick(Sender: TObject);
begin
/// ich will die Klasse nicht im Hauptprogramm haben !
/// wäre nicht nötig
Memo1.lines.add(IntToStr(Myregistry.ReadInteger(1)));
/// Zielversion -> im code sieht man nicht mehr welche implementierung
/// ausgerufen wird
Memo1.lines.add(IntToStr(ReadInteger(1)));
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
useregistryClass := CheckBox2.Checked;
InitReader;
end;
end.
und die Ausgelagerte Klasse
Delphi-Quellcode:
unit Unit_interface;
interface
uses classes, types;
type
IRegistryAccess =
interface
['
{257E3C2E-3601-4FB3-B57C-A7E671EC1B7E}']
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;
var
Myregistry: IRegistryAccess;
useregistryClass: Boolean;
function ReadInteger(
index: Integer): Integer;
function InitReader : Boolean ;
function FreeReader : Boolean;
implementation
function ReadInteger(
index: Integer): Integer;
begin
Result := Myregistry.ReadInteger(1);
end;
{ TRegistryReader }
function TRegistryReader.ReadInteger(IntegerName: Integer): Integer;
begin
Result := -1;
end;
{ TRegistryFileReader }
function TRegistryFileReader.ReadInteger(IntegerName: Integer): Integer;
begin
Result := 333;
end;
function InitReader : Boolean ;
begin
if useregistryClass
then
begin
Myregistry := TRegistryReader.Create;
end
else
begin
Myregistry := TRegistryFileReader.Create;
end;
end;
function FreeReader : Boolean;
begin
// Myregistry.Free;
end;
meine Frage hierzu : laufe ich jetzt in weitere unbekannte Probleme, ist mein Ansatz so Ok?
Die bisherigen Funktionen zum Lesen aus der Registry werden als Wrapper einer Klasse definiert.
Welche Klasse verwendet wird definiere ich über eine Init Funktion in meiner
unit.
Der bisherige Code wandert in die Klasse , der neue Code entsteht in der weiteren neu zu implementierenden Klasse "TRegistryFileReader" .
Was ist der Vorteil einer ClassFactory