Es gibt im Netz wohl endlose Diskussionen darüber, ob das Singleton jetzt böse ist oder nicht. Meines Erachtens ist es in einigen Situationen sehr nützlich.
Das Singleton verhindert, dass es mehrere Instanzen eines Objektes gibt. Es wird immer genau eine Instanz erzeugt, sollte diese bereits existieren, dann wir die Instanz anstelle eines neuen Objektes beim Aufruf zurückgegeben.
In PHP(5) kann man dies recht einfach innerhalb einer Klasse realisieren:
-
<?php -
class ExampleSingleton {
-
-
-
// Wir brauchen eine statische Instanzvariable: -
-
private static $instance = NULL;
-
-
-
/* -
* Verhindern, dass unser Objekt -
* geclont werden kann: -
* Einfach die Magic-function __clone -
* auf "private" setzen. -
*/ -
private function __clone() {}
-
-
-
// Gleiches gilt für den Constructor: -
-
private function __construct() {}
-
-
-
// Nun der Singleton-Constructor -
-
public static function init() {
-
if (!self::$instance) {
-
self::$instance = new self;
-
} -
return self::$instance;
-
} -
} -
?>
Somit kann man das Objekt nur noch über seinen neuen Singleton-Konstruktor instanzieren:
-
<?php -
// Führt zu einem FATAL ERROR: -
$try1 = new ExampleSingleton();
-
// Funktioniert: -
$try2 = ExampleSingleton::init();
-
// Nun nochmal die gleiche Objektinstanz: -
$try3 = ExampleSingleton::init();
-
?>
Klassische Beispiele für Singletons wären z.B. Datenbank-Klassen. Wir verhindern, dass mehrere Instanzen dieser Klassen existieren und somit kostbaren Speicher belegen.
In einem konkreten Fall habe ich dieses Pattern auch in einer HTML5-Klasse eingesetzt, denn es ergibt wenig Sinn, mehrere Ausgabe-Objekte parallel zu haben. Alle Objekte, die dieses HTML5-Objekt nutzen, schreiben ihre Ausgabe in eine "body"-Eigentschaft des Singletons.
Im nächsten Teil sparen wir uns viel Tipparbeit und vererben das Singleton-Pattern einfach.
Willkommen zum zweiten Teil meiner kleinen HowTo-Serie. Heute werde ich Euch zeigen, wie man einem Android-Handy zu einem Zugang zum OpenVPN-Server aus dem 



