Singleton vererben

Status
Nicht offen für weitere Antworten.

Krabat

Bekanntes Mitglied
Ist es möglich eine (am besten abstrakte) Klasse zu haben, die die Methodik des Singletons implementiert, so daß die erbenden Klassen auch sofort Singletons sind? Zudem sollten noch einige Methoden vorgegeben sein, weche die bereits implementiert sind und solche, die unbedingt implmentiert werden müssen (daher abstract).

Falls das zu allgemein ist, formuliere ich das Problem anhand meines Beispiels nochmal richtig aus.
 
G

Gast

Gast
eine klasse, die als singleton funktionieren soll, muss doch eine methode zur verfügung stellen, die eine instanz dieser klasse liefert (fall bisher noch keine existiert). da abstrake klassen aber nur den methodenrumpf beinhalten und nicht die implementierung der methode, dürfte das bei abstrakten klassen meiner meinung nach nicht funktionieren. ich hoffe, ich erzähle jetzt nix falsches...
 
G

Guest

Gast
So ungefähr
Code:
abstract class AbstractSingleton {
  private static AbstractSingleton instance = null;

  protected AbstractSingleton() {
  }

  public final static synchronized AbstractSingleton getInstance() {
    if(instance == null)
      instance = createInstance();
    return instance;
  }

  protected static AbstractSingleton createInstance();
  public void sayYo();

}

class Singleton extends AbstractSingleton {

  protected Singleton() {
    super();
  }

  protected static AbstractSingleton createInstance() {
    return new Singleton();
  }

  public void sayYo() {
    ...
  }
}
 
G

Gast

Gast
ich meinte natürlich nicht den rumpf der methode, sondern die deklaration der methode. dein getInstance darf in einer abstrakten klasse so nicht existieren, implemnetiert wird die methode erst in einer abgeleiteten klasse
 
B

bygones

Gast
Anonymous hat gesagt.:
So ungefähr
Code:
abstract class AbstractSingleton {
  private static AbstractSingleton instance = null;

  protected AbstractSingleton() {
  }

  public final static synchronized AbstractSingleton getInstance() {
    if(instance == null)
      instance = createInstance();
    return instance;
  }

  protected static AbstractSingleton createInstance();
  public void sayYo();

}

class Singleton extends AbstractSingleton {

  protected Singleton() {
    super();
  }

  protected static AbstractSingleton createInstance() {
    return new Singleton();
  }

  public void sayYo() {
    ...
  }
}
nur mal so als kleiner Tipp: kompilier das mal.....

deine createInstance Methode ist nicht möglich... sie muss in dieser Form abstract definiert werden. dann kann sie nicht static sein - folglich musst du eine dummy Impl. nehmen die dir null zurückliefert.

ich versteh nicht worin der sinn liegt ein Singleton zu vererben.... nur um die getInstance methode zu sparen ?... mhm naja
 
G

Guest

Gast
deathbyaclown hat gesagt.:
nur mal so als kleiner Tipp: kompilier das mal.....
OK, static abstract ist abgekackt. ;)
Ich habe es hier nur so auf die Schnelle zusammengetippt, ohne viel zu überlegen.

Oh Herr, lass' Hirn regnen. :autsch:
 

KSG9|sebastian

Top Contributor
Code:
abstract class SingleAbs{
   protected SingleAbs(){}
   private static SingleAbs instance = null;

   public static void getInstance(String clazz){
      try{
         instance = (SingleAbs)Class.forName(clazz).newInstance();
         return instance;
      } catch(ClassCastException){
         return null;
      }
   }
}

Wenn ich jetzt von der Klasse erbe

Code:
class Erbe extends SingleAbS{
// blah Code
}

Dann hindert mich die Vererbung noch lange nicht dran, der Klasse Erbe nen public-Konstruktor zu verpassen und somit das Singleton wieder zu verwerfen.
 

Sky

Top Contributor
Krabat hat gesagt.:
Ist es möglich eine (am besten abstrakte) Klasse zu haben, die die Methodik des Singletons implementiert, so daß die erbenden Klassen auch sofort Singletons sind? Zudem sollten noch einige Methoden vorgegeben sein, weche die bereits implementiert sind und solche, die unbedingt implmentiert werden müssen (daher abstract).

Falls das zu allgemein ist, formuliere ich das Problem anhand meines Beispiels nochmal richtig aus.
Wofür braucht man denn sowas ? Vielleicht hilft Dir ja auch ein anderes Pattern...
 

Krabat

Bekanntes Mitglied
deathbyaclown hat gesagt.:
ich versteh nicht worin der sinn liegt ein Singleton zu vererben.... nur um die getInstance methode zu sparen ?... mhm naja

Nicht nur, es soll eine Art Vorgabe sein, die besagt, daß erbende Klassen von der abstract class jeweils Singletons sein sollen und einige Methoden noch selbst implementieren müssen.
 

Sky

Top Contributor
Aber warum müssen es unbedingt Singletons sein ?

Evtl. würde es Sinn machen, das FactoyPattern anzuwenden. Die Factory gibt Dir immer die richtige Instanz zurück und mittels Interfaces oder abstracter Basisklasse kannste deine gewünschten Methoden bekommen...
 

Krabat

Bekanntes Mitglied
Sky hat gesagt.:
Wofür braucht man denn sowas ? Vielleicht hilft Dir ja auch ein anderes Pattern...

Also ich bastel gerade eine logging lib, deren Haupttyp LogCore von Observable erbt. Diesem sollen Oberserver übergeben werden, die die Output Möglichkeiten wie Ausgabe in der Console, in eine TextDatei, grafische Ausgabe realisieren können. Zum einen braucht man zB. nur eine Ausgabe-Klasse Console (bei Text/grafisch könnte es unter Umständen anders aussehen), zum anderern kann man nicht auf die eingefügten Observer beim Observable zugreifen, was es schwierig macht, diese wieder zu entfernen.
Daher habe ich angenommen, daß man am einfachsten alle Outputs als Singletons vererbt und so einfach auf deren einzige Instanz zugreifen kann, diese also nicht mehr seperat in einer eigenen Struktur speichern muss.
Könnte es anders einfacher/sinnvoller gehen?
 
B

bygones

Gast
Krabat hat gesagt.:
Könnte es anders einfacher/sinnvoller gehen?
wie Sky erwähnt - Factory Pattern

andere Möglichkeit - änhlich Factory - eine Singleton Klasse (z.b. Config Klasse), die initialisiert einmal den gewünschten Logger.... wenn er gebraucht wird holt man sich ihn über die Config
 

Krabat

Bekanntes Mitglied
deathbyaclown hat gesagt.:
andere Möglichkeit - änhlich Factory - eine Singleton Klasse (z.b. Config Klasse), die initialisiert einmal den gewünschten Logger.... wenn er gebraucht wird holt man sich ihn über die Config

Meine Haupt Log-Klasse ist auch schon ein Singleton (offenbar mag ich die mehr als OO ;)), welches beim ersten Aufruf initialisiert wird und seine Einstellungen über ein Properties file lädt. Danach sind noch Veränderungen wie add/remove Output etc. möglich, können aber auch über die Einstellungen im Properties File geregelt werden. Wo wäre der Vorteil von einer Config Klasse gegenüber meinem SingleLog?
 
B

bygones

Gast
man sollte Singletons so wenig wie möglich einsetzen....

ich persönliche habe lieber eine ManagerKlasse, die intern regelt (mit Information die sie wo auch immer her), wie was gemacht wird. Z.b. loggen....

U.a. Vorteil: ein singleton, keine Probleme von irgendwelchen Vererbungshierarchien. Intuitiv würde ich eher zu einem Interface als Basisklasse tendieren für die Logger....
 

Krabat

Bekanntes Mitglied
deathbyaclown hat gesagt.:
ich persönliche habe lieber eine ManagerKlasse, die intern regelt (mit Information die sie wo auch immer her), wie was gemacht wird. Z.b. loggen....

Habe lange darüber nachgedacht und empfinde es ebenfalls als beste Lösung. Am Log Singleton gefiel mir, daß man von jeder Klasse/Methode aus überall Log.getInstance().info("kleine Info hier"); schreiben konnte, ohne die Log Instanz jeweils durch die Klassen "durchreichen" zu müssen, aber mittels Deiner ManagerKlasse kann das fast genauso komfortable gelößt werden (Log log = ManagerKlasse.getLogInstance(); log.info("kleine Info hier");) und man kann alle möglichen Singletons darüber verwalten, bzw. bei multithreading mehrere Log Instanzen bilden, um nicht in Verlegenheit zu kommen, in einen deadlock zu laufen. Danke.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Singleton vererben Allgemeine Java-Themen 10
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