Singleton (Einzelstück)

0 | 2778 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 einzige 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
  • hat keine Beschreibung angegeben. Eine Beschreibung kann man unter dem Punkt "Profil bearbeiten" im Kontrollzentrum eintragen.
  • arbeitet bei der Host Europe GmbH als Software Entwickler und beschäftigt sich seit über 10 Jahren mit der Entwicklung von dynamischen Webanwendungen.