Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Abgeleitete Klassen auf einzelne Units verteilen

  Alt 26. Jul 2022, 10:44
Man kann das sehr elegant auch ohne den DeviceHandler machen:

Delphi-Quellcode:
unit uParentDevice;

interface

type
  TDeviceType = (dtDeviceType1, dtDeviceType2, dtDeviceType3);

  TParentDeviceClass = class of TParentDevice;
  TParentDevice = class
  private
    class function GetDeviceClass(dtDeviceType: TDeviceType): TParentDeviceClass; static;
  public
    constructor Create; virtual;
    class property DeviceClass[dtDeviceType: TDeviceType]: TParentDeviceClass read GetDeviceClass; default;
  end;

implementation

type
  TDeviceType1 = class(TParentDevice);
  TDeviceType2 = class(TParentDevice);
  TDeviceType3 = class(TParentDevice);

constructor TParentDevice.Create;
begin
  inherited;
end;

class function TParentDevice.GetDeviceClass(dtDeviceType: TDeviceType): TParentDeviceClass;
begin
  case dtDeviceType of
    dtDeviceType1: Result := TDeviceType1;
    dtDeviceType2: Result := TDeviceType2;
    dtDeviceType3: Result := TDeviceType3;
  end;
end;
Zum Erzeugen einer passenden Instanz schreibt man dann einfach:
Delphi-Quellcode:
var
  myDevice: TParentDevice;
begin
  myDevice := TParentDevice[dtDeviceType1].Create;
end;
Werden die abgeleiteten Klassen in separate Units verteilt, entstehen natürlich zirkuläre Unit-Referenzen. Um die zu vermeiden, gibt es andere Mechanismen, über die wir dann bei Bedarf ja noch sprechen können.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat