Ich habe den Artikel Abstract Factory, Template Style von Jim Hyslop und Herb Sutter gelesen. Diese Fabrik wird als Singleton implementiert. Sie bieten eine einfache Möglichkeit, Klassen automatisch mit der Helper-Klasse RegisterInFactory zu registrieren.
Jetzt habe ich mehrmals gelesen, dass Singletons vermieden werden sollten, manche sogar als Anti-Patterns und dass es nur wenige Fälle gibt, in denen sie nützlich sind. Ist das einer von ihnen? Oder gibt es einen alternativen Ansatz, der eine so einfache Möglichkeit bietet, Klassen automatisch zu registrieren?
Wie immer für diese Art von Thema gibt es keine Antwort, die für alle Probleme gilt. Einige sagten, dass Singleton vermieden werden sollte, wenn sie als Zugang zu einem Dienst verwendet werden. Es ist eine Verwendung, die der Verwendung von globalen Variablen verwandt ist. Auf diese Weise maskieren Sie die Tatsache, dass Sie Service X in Ihrer Implementierung verwenden:
%Vor%Sie erstellen eine Kopplung mit MyWonderfulService, die die Benutzer Ihrer Klasse nicht erraten können. Darüber hinaus können Sie Ihre nützliche Klasse nicht einfach mit einem Mock-Service testen ...
Deshalb bevorzuge ich normalerweise Dependency Inversion :
%Vor%Dieser Weg wird normalerweise als besser angesehen, da die Kopplung zwischen den Klassen leichter ist. Für einige Dienste, von denen bekannt ist, dass sie in einem Rahmen weit verbreitet sind, ist es jedoch einfacher, ein Singleton zu verwenden. Es macht Sinn für einen einzelnen Dienst, der der Dienst ist, der Ihnen Zugriff auf alle anderen Dienste in einem Framework gibt, zum Beispiel ^^ Es wird oft für technische Dienste wie beispielsweise die Protokollierung verwendet.
my2c
Edit: Ich habe den Artikel gelesen, da der Fokus auf AbstractFactories liegt, die Verwendung eines Singletons ist eine zufällige, keine Designentscheidung. Es ist verständlich in einem Artikel, in dem Sie nicht Dinge schreiben wollen, die Sie nicht auf Ihren Punkt bringen.