Einzelnen Beitrag anzeigen

mbr2005

Registriert seit: 30. Mai 2005
1 Beiträge
 
#3

Re: Problem mit eigener Architektur: Zirkulärer Unit-Bezug..

  Alt 30. Okt 2007, 13:30
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.
  Mit Zitat antworten Zitat