Hallo,
wenn ich das richtig verstanden habe, soll der Programmmanager mehrere SubManager steuern, welche alle aber auch
auf den Programmmanager bezug nehmen sollen.
Für diesen Fall bietet es sich an, zunächst eine Basisklasse für alle SubManager in der gleichen
Unit wie den
Programmmanager zu deklarieren. Diese Basisklasse erhält auch schon den Bezug ( FParent) auf den Programmmanager, der ja in
allen Submanagern benötigt wird. Da im Interfaceteil nur Bezug auf die Basisklasse genommen wird, kann die Einbindung
der Unit_B später im Implementierungsteil erfolgen.
Delphi-Quellcode:
unit Unit_A;
interface
type
TSubManager=
class;
TProgrammManager =
class(TObject)
private
FOptionsManager: TSubManager;
FRegistryPfad:
String;
public
constructor Create;
RegistryPfad:
String read FRegistryPfad;
end;
TSubManager=
class(TObject)
protected
FParent: TProgrammManager;
public
constructor Create(aParent: TProgrammManager);
virtual;
end;
implementation
uses
Unit_B;
constructor TProgrammManager.Create;
begin
FRegistryPfad := '
\Ein\Pfad\in\der\Registry\';
// SubManager "OptionsManager" erstellen und verwenden
FOptionsManager := TOptionsManager.Create;
TOptionsManager(FOptionsManager).LiesOptionen;
end;
constructor TSubManager.Create(aParent: TProgrammManager);
begin
// SubManager mit ProgrammManager Parent erstellen
FParent := aParent;
end;
end.
Delphi-Quellcode:
unit Unit_B;
interface
uses
Unit_A;
type
TOptionsManager=
class(TSubManager)
public
procedure LiesOptionen;
end;
implementation
procedure TOptionsManager.LiesOptionen;
begin
// Mit globalen Werten des ProgrammManager arbeiten
OpenRegistryPath(FParent.RegistryPfad);
...
end;
end.