Hallo
Wie kann ich den in Java eine Klasse schreiben, die außerhalb der Klasse nur ein Objekt erzeugen kann. Ist es überhaupt möglich??
Danke im Voraus
Hallo
Wie kann ich den in Java eine Klasse schreiben, die außerhalb der Klasse nur ein Objekt erzeugen kann. Ist es überhaupt möglich??
Danke im Voraus
hi
du meinst einen singleton - ein design-pattern, mit dem man sicherstellt, dass von einer bestimmten klasse nur eine einzige instanz erzeugt wird.
grob gesagt, geht es darum, dass du der klasse einen privaten konstruktor gibst - damit kann niemand von ausserhalb die klasse instanzieren. nur die klasse selbst kann eine instanz anlegen. dann brauchst du noch eine statische methode, die eine instanz erzeugt - fertig.
ganz grob sieht das in etwa so aus:
public class EinzelObjekt {
// privater Konstruktor - verhindert Instanzieren von aussen
private EinzelObjekt () {
}
// statisches Feld zum Speichern der (einzigen) Instanz
private static EinzelObjekt instance = null ;
// Wenn noch keine Instanz exisitiert, dann anlegen
// ansonsten die bereits erzeugte Instanz zurückgeben
// damit wird sichergestellt, dass nur eine einzige Instanz
// dieser Klasse in der VM existiert aber trotzdem jede Klasse
// an diese Instanz rankommt.
public static EinzelObjekt getInstance() {
if (instance == null)
EinzelObjekt.instance = new EinzelObjekt() ;
return EinzelObjekt.instance ;
}
}
lg
erwin
Hallo,
der Name des Design Patterns heißt Singleton.
Es fehlt noch der Destruktor:
public void dispose() {
instance = null;
}
Gruß
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi,
ein Singleton benötigt keinen Destruktor, die Objektinstanz soll ja gerade wiederverwendet werden.
Gruss,
Herb
Hallo,
nicht unbedingt. Manchmal möchte man auch gerade das Objekt wieder löschen. Ein Beispiel könnte eine Datenverbindung sein. Alle greifen über das Singleton darauf zu. Wenn die Verbindung zu lange nicht benutzt wird, wird sie abgebaut. Der nächste Benutzer merkt davon nichts, da das Objekt ja sofort wieder ewrzeugt wird.
Gruß
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Erwin.
du meinst einen singleton - ein design-pattern, mit dem man
sicherstellt, dass von einer bestimmten klasse nur eine
einzige instanz erzeugt wird.
ganz grob sieht das in etwa so aus:
// statisches Feld zum Speichern der (einzigen) Instanz
private static EinzelObjekt instance = null ;
public static EinzelObjekt getInstance() {
if (instance == null)
EinzelObjekt.instance = new EinzelObjekt() ;
return EinzelObjekt.instance ;
}
Dein Singleton ist nicht thread-sicher und hält damit nicht
wirklich was es verspricht: Da Deine getInstance() Methode
jederzeit von einem anderen Thread unterbrochen werden
kann, kann Thread1 im ungünstigen Fall eine andere Instanz
als Thread2 bekommen.
Fazit: Ein echtes Singleton entweder innerhalb von
getInstance() synchronisieren oder - viel einfacher -
die Instanz sofort im statischen Feld anlegen:
private static EinzelObjekt instance = new Einzelobjekt();
public static EinzelObjekt getInstance() {
return EinzelObjekt.instance;
}
Gruß,
-Andreas.
Hallo
Danke für das schnelle Antworten.
Ich wusste nicht, dass es dafür ein Fachbegriff gibt.
Auf Wikipedia ist es recht gut erklärt.
http://de.wikipedia.org/wiki/Einzelst%C3%BCck_(Entwu…
Danke