Frage Verlängert sich eine Singleton-Klasse?


Ich erstelle einen Logger für eine Anwendung. Ich verwende eine Logger-Bibliothek eines Drittanbieters. In welchem ​​Logger ist Singleton implementiert.

Ich habe diese Logger-Klasse erweitert, weil ich einige statische Funktionen hinzufügen möchte. In diesen statischen Funktionen verwende ich intern die Instanz (die Single ist) von Logger (die ich geerbt habe).

Ich erstelle weder eine Instanz von MyLogger noch re-implementiert die Methode getInstance () der Super-Klasse. Aber ich bekomme immer noch Warnungen wie Destruktor von MyLogger kann nicht erstellt werden als Elternklasse (Loggger) Destruktor ist nicht zugänglich.

Ich möchte es wissen, Ich mache etwas falsch? Vererbung der Singleton ist falsch oder sollte vermieden werden ??


5
2018-03-26 17:26


Ursprung


Antworten:


Wenn man die Vorzüge des Singleton-Musters beiseite lässt (es gibt eine Denkschule, die es als Anti-Pattern beschreibt), sollte es nicht nötig sein Unterklasse es einfach hinzuzufügen statisch Funktionalität. Hier sind sprachspezifische Ansätze, die ich einem Singleton unterordnen möchte:

  • Verwenden Sie eine freistehende Funktion, die in einem C ++ - Namespace eingeschlossen ist
  • Verwenden Sie eine Erweiterungsklasse in C #
  • Verwenden Sie eine Hilfsklasse in Java
  • Verwenden Sie eine Kategorie in Objective-C

4
2018-03-26 17:33



Ich würde ein Nicht-Singleton verwenden und Anrufe an den Singleton delegieren, wo es nötig ist. Wann immer Sie die Möglichkeit haben, ein Singleton loszuwerden, sollten Sie es tun.


0
2018-03-26 17:29



Ich stimme Garret Hall zu, sollten Sie Singletons, wenn möglich, vermeiden. Das heißt, ich sehe es aus einem Grund nicht falsch. Die Person, die den Singleton implementiert hat, kann Sie erweitern. Wenn der API-Entwickler nicht wollte, dass der Singleton-Klassenlogger erweitert wird, hätten sie den Konstruktor privat gemacht, beispielsweise in C ++, oder welche Methode auch immer für die von Ihnen verwendete Sprache geeignet ist.


0
2018-03-26 17:32



Ich denke, das Schreiben eines Wrappers über die Klasse ist nicht die richtige Lösung, da Sie Wrapper für jede Methode schreiben müssen, die Sie von Singleton benötigen. Und Sie schreiben Dutzende von Funktionen.

Sie beschränken sich auch auf die Verwendung aller Funktionen, die in Singleton verfügbar sind.

KEINE GUTE IDEE!!!


0
2018-03-28 06:29