Verwenden Sie kein Singleton.
Der einzige Unterschied zwischen einer Singleton-Variablen und einer globalen Variablen besteht darin, dass das Singleton versucht, eine einzelne Instanz zu erzwingen (indem beispielsweise der Konstruktor privat gemacht wird).
Machen Sie den Konstruktor stattdessen öffentlich und schreiben Sie Tests mit neuen Instanzen. Verwenden Sie in Ihrem tatsächlichen Programm getInstance()
, um die kanonische globale Instanz zu erhalten (oder verwenden Sie einen IOC-Container).
Und denken Sie daran, dass singletons are pathological liars.
Wenn Sie mit der Idee eines Singleton noch zu vertraut sind, können Sie den Konstruktor öffentlich machen, indem Sie eine öffentliche (und statische) Factory-Methode hinzufügen, um Instanzen auf eine Weise zu erstellen, die nicht zufällig verwendet werden kann. zB:
public static MyClass TEST_CreateInstance() {
return new MyClass();
}
-1, IMO dies macht eine schlechte Situation schlechter – orip
+1 für eine tatsächliche Lösung geben. Ich habe keine Kontrolle über den Code von Drittanbietern, der ein Singleton ist, und brauche Lösungen, die nicht darauf hingewiesen werden, wie es gemacht werden sollte. – eis