Ich habe einige Klassen, die als Singletons verwendet werden. Sie teilen einige grundlegende Funktionen und erweitern den gleichen Vorgänger aus einer Bibliothek, die normalerweise nicht als Singleton verwendet wird.Wie kann ich einen Singleton haben, der von einem abstrakten Basistyp in Java abgeleitet ist?
Wenn ich die allgemeine Funktionalität in eine Basisklasse, die vom gemeinsamen Vorfahren erbt, stelle, bekomme ich eine Klasse, die keinen Sinn zu instantiieren, also habe ich es abstrakt gemacht. Da die Klassen alle als Singletons verwendet werden, sollten sie alle eine init() - und eine getInstance() -Methode haben, die beide statisch sind. Alle Konstruktoren sind natürlich nicht öffentlich. Jetzt
, da static
ist eine illegale Modifikator für abstrakte Methoden, die folgenden nicht funktioniert, obwohl dies genau sein würde, was ich will:
class Base extends LibraryClass {
protected Base() {
// ... constructor
}
// ... common methods
// ILLEGAL!
public static abstract void init();
public static abstract <T extends Base>T getInstance();
}
class A extends Base {
private static A _INSTANCE;
private A() {
super();
}
public static void init() {
_INSTANCE = new A();
}
public static A getInstance() {
return _INSTANCE;
}
}
Ich konnte nur die illegalen Linien in der Basis auslassen Klasse und damit fertig sein. Aber wie kann ich ausdrücken, dass jedes Kind der Basis diese Methoden haben muss?
Warum brauchen wir Singleton, obwohl wir bereits über Static oder Final in Java verfügen? Was ist? der Major resign/cause, der uns zwingt, "Singleton" anstelle von "Static, Final" zu übernehmen? Obwohl Singleton zu erreichen, verwenden wir Static.Ich konnte dieses Rätsel nicht verstehen. Bitte geben Sie Ihre Kommentare ab. –
statische final ist für Konstanten, die eifrig erstellt werden. Ein Singleton wird normalerweise faul erstellt (nur wenn es benötigt wird). Außerdem erlaubt das statische Final nicht, die "Konstante" durch ein Modell zu ersetzen. Daher machen sie Tests schwierig oder sogar unmöglich. –
Siehe http://stackoverflow.com/questions/11831/singletons-good-design-or-a-crutch –