Ach, ich stoße ständig gegen weitere Wände!
Ich lasse den generischen Ansatz sein und mache es auf die klassische Tour.
Dann versteht man den Quelltext auch in zwei Wochen noch und die Kollegen auch!
Also eher sowas, wobei
TMCS2Outputs
ein Enum ist und
TActuatorClass
ein
class of
.
Delphi-Quellcode:
type
TActuatorFactory = class abstract
strict private
class var
FActuatorDictionary : TDictionary<TMCS2Outputs, TActuatorClass>;
class constructor Create;
class destructor Destroy;
public
class procedure RegisterActuator(const OutputKind : TMCS2Outputs; const AClass : TActuatorClass);
class function GetActuator(const OutputKind : TMCS2Outputs; const CardID : TCardID) : IActuator;
end;
implementation
class constructor TActuatorFactory.Create;
begin
FActuatorDictionary := TDictionary<TMCS2Outputs, TActuatorClass>.Create;
end;
class destructor TActuatorFactory.Destroy;
begin
FreeAndNil(FActuatorDictionary);
inherited;
end;
class function TActuatorFactory.GetActuator(const OutputKind : TMCS2Outputs; const CardID : TCardID) : IActuator;
var
LClass : TActuatorClass;
begin
Result := nil;
if FActuatorDictionary.TryGetValue(OutputKind, LClass) then
begin
Result := LClass.Create(CardID);
end;
end;
class procedure TActuatorFactory.RegisterActuator(const OutputKind : TMCS2Outputs; const AClass : TActuatorClass);
begin
FActuatorDictionary.Add(OutputKind, AClass);
end;