Singleton (Einzelstück)
Anzeige Hier werben
Das Singleton (Einzelstück) Entwurfsmuster gehört zur Kategorie der Erzeugungsmuster (Creational Pattern). Es stellt sicher das immer nur eine Instanz einer Klasse existiert.
Anwendung
Ein Anwendungsbeispiel für das Singleton Entwurfsmuster ist eine Klasse die Logging-Funktionen zur Verfügung stellt. Da durch das Singleton-Entwurfsmuster ein zentraler Zugriff möglich und die Erzeugung unnötiger Objekte vermieden wird.
Implementierung
Lazy Creation
Das einzigste Objekt der Klasse wird erst erzeugt wenn es benötigt wird, d.h. wenn getInstance() aufgerufen wird.
PHP
In PHP ist das Singleton-Pattern erst ab Version 5 in dieser Form möglich.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php
class Singleton {
private static $instance = null;
//Den Zugriff auf den Konstruktor von Außen unterbinden
private function __construct() {}
/* Erzeugt eine neue Instanz der Klasse
* wenn noch keine existiert und gibt sie zurück
*/
public static function getInstance()
{
if(self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
//Das Klonen des Objektes verhindern
private function __clone() {}
}
//Zugriff auf das Objekt der Klasse
$singleton = Singleton::getInstance();
?>
|
Java
Damit auch bei mehreren nebenläufigen Threads sichergestellt werden kann das immer nur eine Instanz existiert muss die Methode getInstance() synchronisiert werden. Dies führt dazu das diese Methode bei jedem Zugriff für alle anderen Threads blockiert wird. Deshalb sollte in Java wenn möglich die Eager Creation (siehe weiter Unten) verwendet werden.
1 2 3 4 5 6 7 8 9 10 11 12 | public final class Singleton {
private static instance;
private Singleton() {};
public synchronized static getInstance()
{
if(instance == null)
return instance = new Singleton();
return instance;
}
}
|
Eager Creation
Das Objekt der Klasse wird während der Initialisierung der Klasse erzeugt. Die getInstance() Methode gibt das Objekt nur noch zurück. Dadurch muss diese Methode dann nicht mehr synchronisiert werden.
Java
1 2 3 4 5 6 7 8 9 10 | public final class Singleton {
private static instance = new Singleton();
private Singleton() {};
public static Singleton getInstance()
{
return instance;
}
}
|
Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 2 Personen an der Seite "Singleton (Einzelstück)" mitgewirkt.
Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Singleton (Einzelstück)" hier bearbeiten.
-
Ich beschäftige mich seit mehreren Jahren mit Webdesign und ins besondere mit Webentwicklung. Derzeit studiere ich Angewandte Informatik.
-
arbeitet bei der Adcloud GmbH als Software Engineer und beschäftigt sich bereits seit dem Jahr 2000 mit der Entwicklung von dynamischen Internetseiten.


..
Der private Konsturktor muss angelegen sein, da sonst automatisch ein public-Konstruktor erstellt wird und somit wieder beliebig viele Objekte der Klasse angelegt werden können.
qwertzuio
in dem letzten beispiel ist der private konstruktor etwas überflüssig...
Re: qwertzuio
das frag ich mich auch! :-P
Re: qwertzuio
Wäre nett wenn du mal erklären würdest warum das überflüssig ist. Meiner Meinung nach könnte man sonst weiterhin von außen eine neue Instanz erzeugen. Ich habe auch kein Beispiel gefunden wo der Konstruktor nicht private ist.
Re: qwertzuio
Sorry,
hab mich geirrt...
macht doch nicht gleich sonnen aufstand.
Re: qwertzuio
Ist ja auch korrekt so, kA was der Herr da auszusetzen hat.