Singleton vererben

Status
Nicht offen für weitere Antworten.
E

Eric

Gast
Hallo Java-Freunde,

ich möchte gern eine abstrakte Managerklasse schreiben, da es davon immer nur eine Instanz geben soll, bietet sich das Singleton Muster an. Nun habe ich das Problem, dass ich den Singleton-Code wegen des privaten Konstuctors und dem Aufruf des konkreten Konstruktors nicht vererben kann. Dann macht die abstrakte Klasse zwar noch Sinn, ist aber aus meiner Sicht unschön. Kennt jemand Lösungen dafür?

Grüsse Eric
 
B

Beni

Gast
Hm, mach den Konstruktor protected. In dem Konstruktor überprüfst du, ob nicht schon bereits ein Managerobjekt existiert (ich weiss nicht wie dein Prog aufgebaut ist, aber irgendwo wird dieses Singelton ja sein...). Falls bereits ein Manager existiert: Exception werfen, damit wird das Herstellen des neuen Managers abgebrochen.
Und ansonsten setzt du diesen neuen Manager als den einzig existenzberechtigten Manager.
 

Bleiglanz

Gesperrter Benutzer
vergiss es, was soll Vererbung bei einem Singleton bringen?

jede "Unterklasse" würde ja eine "anonyme Kopie" des Parents enthalten, das ist dann kein Singleton mehr...
 

Sky

Top Contributor
Darf es nur eine Instanz der abstrakten Managerklasse geben oder je eine Instanz pro Ableitung??
 

Asandir

Mitglied
Ich habe von dieser Seite einen Code zum Vererben eines Singleton bekommen.

Code:
public class AdaptableSingleton{
     protected static AdaptableSingleton ref = new Adaptablesingleton();

     protected adaptablesingleton(){
          //....
     }

     public static AdaptableSingelton getRef(){
          return ref;
     }
     
}

public class ModifiedSingleton extends AdaptableSingleton{

   // etwas tricky
   // das alte Singleton wird weggeworfen

  static {
    ref = new modifiedSingleton(){  
  }

  protected ModifiedSingleton(){
    //..
  }

}

Nun habe ich dabei aber das Problem, dass ich die Funktionen der Unterklasse nicht aufrufen kann,
weil die getRef() ja ein Object vom Typ AdaptableSingleton wiedergibt. Kann mir da jemand helfen?
 

Sky

Top Contributor
Hast Du es schon mal mit einem Cast versucht?
Code:
ModifiedSingleton ms = (ModifiedSingleton)ModifiedSingleton.getRef();

btw: der gängige Name der Methode zum "holen" der Singleton-Instanz ist nicht getRef() sonder getInstance().
 
G

Guest

Gast
Ja ich hielt es für eine gute Idee, da ich mehrere Klassen für den Zugriff auf verschiedene Tabellen einer Datenbank erstellt habe. Diese sollen natürlich nur einmal instanziert werden. Also bietet sich das Singelton Muster an.
In der Oberklasse DAO wird die Connection Klasse instanziert und auch ein Statement etc. geholt. Nun wollte ich für die Unterklassen Code sparen und das Singleton vererben, soviel zur Singletonitis.

@Sky80, ja habe ich. Da kam aber ein Fehler weswegen ich es nicht weiter probiert habe.
Ich werde es aber nochmal ausprobieren und gegebenenfalls den Fehler und zugehörigen Code posten.
 

Bleiglanz

Gesperrter Benutzer
Anonymous hat gesagt.:
Ja ich hielt es für eine gute Idee, da ich mehrere Klassen für den Zugriff auf verschiedene Tabellen einer Datenbank erstellt habe. Diese sollen natürlich nur einmal instanziert werden. Also bietet sich das Singelton Muster an.
Warum bietet sich das an?

In der Oberklasse DAO wird die Connection Klasse instanziert und auch ein Statement etc. geholt. Nun wollte ich für die Unterklassen Code sparen und das Singleton vererben, soviel zur Singletonitis.

Warum machst du nicht EIN Singleton (der Name sagts ja schon), das mit VERSCHIEDENEN Tabellen umgehen kann?

Wenn die Connection in der Oberklasse instanziert wird, dann hat ja jede Unterklasse eine eigene Connection

=> für 5 Tabellen verbrätst du dann 5 Connections, tolles Design!
 

Asandir

Mitglied
Wenn ich eine einzige Klasse für das umgehen mit den Tabellen mache, wird es unübersichtlich, ausserdem ist die Klasse nicht wiederverwendbar. Ich verbrate auch keine 5 Connections, da die Oberklasse eine andere Klasse anspricht, die auch nach dem Singleton Pattern erstellt wurde. Ich habe es jetzt aber anders gelöst. Die Oberklasse ist nun eine abstrakte Klasse, die die Connection einbindet und sich ein statement holt. In den Unterklassen wird dann die getInstance implementiert. Zwar etwas umständlicher als per Vererbung, aber es funzt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Singleton vererben Allgemeine Java-Themen 15
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
J Singleton Allgemeine Java-Themen 5
Z deserialize singleton Allgemeine Java-Themen 9
A Singleton threadsafe Allgemeine Java-Themen 8
S Singleton Instanz löschen Allgemeine Java-Themen 5
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
T ActionListener und Singleton Allgemeine Java-Themen 15
S Singleton Entwurfsmuster Allgemeine Java-Themen 20
T So eine Art Singleton-Factory? Allgemeine Java-Themen 3
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
S Singleton hier sinnvol? Allgemeine Java-Themen 20
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
B Volatile Frage: Reicht es nur den Singleton als volatile zu deklarieren? Allgemeine Java-Themen 4
Iron Monkey Singleton mit Parameter Allgemeine Java-Themen 14
G Singleton Frage: Allgemeine Java-Themen 17
M Singleton und Vererbung? Allgemeine Java-Themen 45
R Wo initilisiere ich eine Liste in einem Singleton? Allgemeine Java-Themen 2
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
B Generisches Singleton implementieren Allgemeine Java-Themen 12
H Singleton und MultiThreading [erledigt] Allgemeine Java-Themen 3
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
P SingleTon Allgemeine Java-Themen 5
M zwei Threads - ein singleton-Objekt Allgemeine Java-Themen 3
RaoulDuke Agent als Singleton Thread Allgemeine Java-Themen 7
S singleton vs. static Allgemeine Java-Themen 7
P Singleton vs static Allgemeine Java-Themen 19
E Frage zu Singleton Allgemeine Java-Themen 22
D Design Pattern: Singleton Allgemeine Java-Themen 4
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
Rudolf JUnit4-Testklasse erweitern ohne zu vererben Allgemeine Java-Themen 6
S konstruktor vererben Allgemeine Java-Themen 5
S Konstruktor vererben Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben