Ich habe mit einer interessanten Idee gespielt (Keine Ahnung, ob ich es in einen Code aufnehmen werde, aber es macht Spaß darüber nachzudenken)sind hierarchische Singletons in Java möglich?
Nehmen wir an, wir haben ein Programm, das eine große Anzahl von Klassen erfordert einer bestimmten Unterklasse. Und diese Klassen müssen alle Singletons sein. Nun könnten wir das Singleton-Muster für jede dieser Klassen schreiben, aber es erscheint verschwenderisch, den gleichen Code immer wieder zu schreiben, und wir haben bereits eine gemeinsame Basisklasse. Es wäre wirklich schön, ein getSingleton Methode von A zu schaffen, die, wenn sie von einer Unterklasse genannt, ein Singleton der B-Klasse gibt (Guss der Klasse A der Einfachheit halber)
class A{
public A getSingleton(){
//Wizardry
}
}
class B extends A{
}
A blargh = B.getSingleton()
A gish = B.getSingleton()
if(A == B)
System.out.println("It works!")
Es scheint mir, dass die Art und Weise zu tun Das wäre, Bs Standardkonstruktor zu erkennen und aufzurufen (vorausgesetzt, wir müssen nichts weiterreichen.) Ich kenne ein wenig von der schwarzen Magie der Reflektion in Java, aber ich bin mir nicht sicher, ob das möglich ist.
Wer interessiert sich dafür zu rätseln?
Sie brauchen selten ein echtes Singleton. In einigen Apps benötigen Sie möglicherweise Objekte, die während des Lebenszyklus Ihrer Anwendung genau eine Instanz haben sollen. Aber Sie sollten wahrscheinlich * kein * Singleton dafür verwenden, weil es korrekte Einheitentests verkomplizieren (oder verhindern) soll. Was Sie wollen, ist etwas, das fast ein Singleton ist, aber nicht genau. Framework wie Spring kann in solchen Fällen helfen. – SyntaxT3rr0r
@Chris S. - Wie unterscheidet sich Ihr Kommentar von meiner Antwort? Wir schlagen beide vor, dass Singletons nicht die Antwort sind. Warum sagst du, dass ich "nicht helfe"? – duffymo