Wenn es wirklich nur eine Instanz für diese Klasse in deinem Programm geben soll, dann spricht m.M. nichts gegen deinen Ansatz. Die Alternative wäre, diese eine Instanz jeweils als Parameter oder anderweitig mitzugeben wo sie gebraucht wird. Das halte ich aber für völlig unpragmatisch und in vielen Fällen für kontraproduktiv.
Natürlich gibt es andere Ansätze, mit denen diese Singleton-Instanz vermieden werden kann, wobei in den meisten Fällen dann doch intern wieder nur eine Instanz vorgehalten wird, was ja auch eigentlich die Vorgabe in diesem Anwendungsfall ist. Jetzt irgendwelche Klimmzüge zu machen, um formal dem Singleton-Shaming zu entgehen, erscheint mir nicht wirklich sinnvoll.
Wenn du es etwas flexibler haben möchtest, dann implementiere eine Factory-Funktionalität, die du bei Bedarf anpassen kannst um ein anderes Verhalten für Tests oder als Mock zu ermöglichen.
Delphi-Quellcode:
type
TMyConfigClass = class of TMyConfig;
TMyConfig = class
strict private
class var FMyConfigClass: TMyConfigClass;
class var FInstance: TMyConfig;
class function GetInstance: TMyConfig; static;
class destructor ClassDestroy;
private
FFeld: integer;
public
property Feld: integer read FFeld write FFeld;
class property Instance: TMyConfig read GetInstance;
class property MyConfigClass: TMyConfigClass read FMyConfigClass write FMyConfigClass;
end;
class function TMyConfig.GetInstance: TMyConfig;
begin
if not Assigned(FInstance) then begin
if Assigned(FMyConfigClass) then
FInstance := FMyConfigClass.Create
else
FInstance := TMyConfig.Create;
end;
Result := FInstance;
end;
class destructor TMyConfig.ClassDestroy;
begin
FInstance.Free;
end;