Singleton (Einzelstück)

0 | 6 Kommentare | 1023 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Singleton (Einzelstück)" mit Ihrem Wissen!

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.

Implementierung in PHP (ab Version 5)  
PHP
 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.

Implementierung in Java  
java
 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
Implementierung in Java  
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;
    }
}

Wikiseite bearbeiten

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.

Mitarbeiter
  • 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.

Kommentare: Singleton (Einzelstück)

Neuen Kommentar schreiben
..
Beantworten

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.

Lukas R am 08.05.2010 um 12:53
qwertzuio
Beantworten

in dem letzten beispiel ist der private konstruktor etwas überflüssig...

Simon Bethke am 28.03.2009 um 08:43
Re: qwertzuio
Beantworten

das frag ich mich auch! :-P

Stefan N. am 29.03.2009 um 21:17
Re: qwertzuio
Beantworten

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.

christian am 28.03.2009 um 13:35
Re: qwertzuio
Beantworten

Sorry,
hab mich geirrt...

macht doch nicht gleich sonnen aufstand.

Simon Bethke am 29.03.2009 um 22:43
Re: qwertzuio
Beantworten

Ist ja auch korrekt so, kA was der Herr da auszusetzen hat.

JimBamir am 29.03.2009 um 12:23