Singleton lazy

Status
Nicht offen für weitere Antworten.

sousou

Bekanntes Mitglied
Hallo zusammen,

Ich hab eine frage zu dem Singleton Lazy Creation, und zwar gehts ja dabei darum, das von einer Klasse nur ein Objekt erstellt werden kann und das erst dann aufgerufen wird, wenn man es benötigt.


Eine Sache versteh ich an den Code nicht und zwar dieses :

public static SingletonLazy getDasObjekt() {

Was soll das bedeuten bzw. bringen? Ein Methode erstellt man soweit ich weißt

"Public oder Private", "Typ der Methode", "Name der Methode()"

Oder soll der Klassenname der Typ in dem Fall sein, falls ja warum ?


Code:
[B]

/* Singelton Pattern : lazy creation */
    class SingletonLazy {
   
   /* kein new von außen:
	  Zunächst muss man sicherstellen, dass von der Klasse keine neuen Objekte(Instanzen) erzeugt
	  werden können. Hierfür setzt man die Sichbarkeit des Konstruktors
	  auf private.
	*/
       private SingletonLazy() { }
		 
   
   /* das Objekt mit Zugriff über den Klassennamen 
     wird erst bei Bedarf erzeugt : lazy creation
	  
   */
      private static SingletonLazy dasObjekt; /*1*/
		
   
      public static SingletonLazy getDasObjekt() {
         if(dasObjekt==null) { // noch nicht erzeugt
            dasObjekt = new SingletonLazy(); // *1* fortsetzung von erstellung des Objekts!
         }
         return dasObjekt;
      }
		
 
   }
	
[/B]

Danke, gruß
 

Der Müde Joe

Top Contributor
>Was soll das bedeuten bzw. bringen?

Wenn noch kein Objekt existiert (null) dann erstelle eins (new) und gib es zurück, sonst gib es einafch zurück.
Du kannst von aussen kein Objekt erstellen da der Knstruktor private ist --> es existiert genau EINE Instanz --> singleton

einfacher übrigens:
Java:
public enum Singleton { INSTANCE; }
 

hdi

Top Contributor
Also was du wohl nicht richtig verstehst ist dieser "Typ der Methode", von dem du redest. Das ist nämlich der Rückgabetyp der Methode, also der Datentyp des Objektes, das die Methode per return zurückgibt.
Und da die Methode dieser Klasse ja genau die einzige Instanz davon zurückgeben soll, ist der Rückgabetyp eben der Datentyp dieser Klasse. Weil du kriegst ja ein "SingletonLazy"-Objekt zurück.

Und "bringen" tut das Lazy-Inizializing, dass dieses Objekt erst dann erstellt wird, wenn erstmalig jemand es braucht (erstmalig diese Methode aufgerufen wird). Kann ja sein dass du das Objekt anbietest, falls es jmd braucht, aber zur Laufzeit es dann manchmal gar nicht gebraucht wird (zB weil der User auf einen bestimmten Button einfach nie klickt).

Du sparst also evtl. unnötige Ressourcen.
 

sousou

Bekanntes Mitglied
ahja stimmt, gar nicht dran gedacht... wenn ich ein Integer zurückgebe mach ich ja auch dann int methode ..

und hier gebe ich ein Objekt zurück und der Typ vom objekt ist der Klassenname.

danke
 

Wildcard

Top Contributor
Davon abgesehen das Singletons fast immer ein Anti-Pattern sind und man sich deren Einsatz gründlich überlegen sollte, ist diese lazy Variante fast immer schlecht. Zum einen ist die Synchronisierung schwierig in Java (siehe Double Checked Locking), zum anderen bringt es meistens einfach gar nichts.
Wenn man das Member direkt initialisiert, dann passiert das auch erst dann wenn die Klasse zum ersten mal gebraucht wird, und was soll man mit der Singleton Klasse schon machen ausser getInstance aufrufen.
Also, solange du keine trifftigen Gründe hast und ganz sicher ein Singleton verwenden willst, dann am besten einfach
Code:
private static SingletonLazy dasObjekt; = new SingletonLazy()
oder wie von der Müde Joe vorgeschlagen
 

hdi

Top Contributor
Wildcard dazu hab ich auch mal ne Frage:
Zur Zeit arbeite ich an einer GUI (Film-Datenbank), und ich bin dabei einige Klassen zu Singletons zu machen.. Ich würde auch lieber OO bleiben, aber ich hab das Gefühl dass das in diesem Fall zu ernst genommen ist und eig. nur pseudo. Als das mit dem OO.

Bsp:
Ich hab einige Dialoge, wenn der User auf verschiedene Buttons klickt. Ich möchte jetzt ein setLocationRelativeTo(GUI) haben. Die Buttons liegen z.T. ziemlich tief in meiner Komponenten-Hierarchie, sprich in irgendeinem Panel auf irgendeinem Panel von irgendeinem Panel, das im GUI-Konstruktor erstellt wird.

Also soll ich jetzt ernsthaft mein GUI-Objekt durch alle meine Klassen durchreichen, nur damit es dann in Ebene 7 für irgendeinen Dialog verwendet werden kann? Ist das nicht zu viel des Guten?

Ich denke da halt an Refactoring. Was passiert wenn ich mein Fenster austauschen will? Dann darf ich zwanzig Konstruktoren oder Setter verändern. Und selbst wenn alles so bleibt, das bläht doch die Konstruktoren nur auf?

Wie löst du sowas?
 

Wildcard

Top Contributor
Ich denke da halt an Refactoring. Was passiert wenn ich mein Fenster austauschen will? Dann darf ich zwanzig Konstruktoren oder Setter verändern. Und selbst wenn alles so bleibt, das bläht doch die Konstruktoren nur auf?
Anders gefragt, was passiert wenn du dein Hauptframe änderst (andere Klasse)? Dann musst du alles ändern was auf das Singleton zugreift.
Dependency Injection ist zB eine bewährte Lösung. Wenn du unbedingt etwas Singleton Artiges brauchst, dann mach es mit öffentlichem Konstruktor und einem getDefault, das ist dann immerhin noch flexibler als ein echtes Singleton
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
O Singleton Java Basics - Anfänger-Themen 5
R Methode in Singleton Klasse Java Basics - Anfänger-Themen 1
O Singleton Verständnis Java Basics - Anfänger-Themen 4
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
R OOP Singleton Java Basics - Anfänger-Themen 10
U Vererben von Singleton Java Basics - Anfänger-Themen 17
S Singleton - Daten einspielen Java Basics - Anfänger-Themen 5
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
M Singleton mit Parametern im Konstruktor Java Basics - Anfänger-Themen 18
D Singleton beim JFrame zerstören Java Basics - Anfänger-Themen 4
L Java Serialisierung Singleton Java Basics - Anfänger-Themen 6
A JBoss-Anwendung soll im Singleton-Mode laufen Java Basics - Anfänger-Themen 6
Luk10 Problem mit Singleton bzw statischer Referenz! Java Basics - Anfänger-Themen 16
S Instanz(en) einer Singleton-Klasse Java Basics - Anfänger-Themen 11
S Statische Klassen/ Singleton Java Basics - Anfänger-Themen 13
J Warum verwendet man Singleton? Java Basics - Anfänger-Themen 7
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
A ist das ein Singleton-Pattern? Java Basics - Anfänger-Themen 6
P Singleton-Implementation Java Basics - Anfänger-Themen 8
F singleton Java Basics - Anfänger-Themen 4
T Singleton Java Basics - Anfänger-Themen 13
Antoras Singleton oder Controller / Datenverwaltungsklasse? Java Basics - Anfänger-Themen 10
D Objekte anlegen und Singleton Pattern Java Basics - Anfänger-Themen 21
D Denkfehler Singleton Java Basics - Anfänger-Themen 53
X Singleton - In diesem Fall sinnvoll? Java Basics - Anfänger-Themen 22
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
M Singleton Pattern Java Basics - Anfänger-Themen 35
J Singleton Pattern Java Basics - Anfänger-Themen 5
S Singleton Pattern passend hierfür? Java Basics - Anfänger-Themen 60
M Mp3 Player mit Singleton Java Basics - Anfänger-Themen 8
M GUI als SingleTon Java Basics - Anfänger-Themen 6
B Singleton und Resourcebundle Java Basics - Anfänger-Themen 7
G Singleton Pattern Java Basics - Anfänger-Themen 7
D Singleton in Java implementieren Java Basics - Anfänger-Themen 6
H singleton Synchronisations Problem? Java Basics - Anfänger-Themen 2
M Singleton verwenden, aber wie? Java Basics - Anfänger-Themen 3
H Singleton mit Attributen Java Basics - Anfänger-Themen 7
I Ical4j - Lazy Loading von Events? Java Basics - Anfänger-Themen 2
N Verzögerte Berechnung "Lazy" Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben