Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: E2010 - Incompatible Types-Fehler in generischer Factory

  Alt 1. Apr 2015, 17:14
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;
  Mit Zitat antworten Zitat