Artikelformat

Design Pattern: „Singleton“

Da dies der erste Beitrag zum großen Thema „Design Pattern“ ist, gibt es eine kurze Einführung. Ein „Design Pattern“ ist ein Muster in der Softwareentwicklung, das sich bewährt hat und von vielen Leute genauso genutzt wird. Damit man für ein solches Muster auch einen Namen hat, überlegt man sich eine gute Umschreibung und schon hat man ein neues Design Pattern (oder Entwurfsmuster) geschaffen.

Nun gibt es das Singleton. Dies ist eine Klasse, von der es nur eine Instanz gibt. Eigentlich ein recht einfaches Konzept.

Um dies nun zu bewerkstelligen, werden üblicherweise die Methoden einer Klasse überschrieben, die dazu genutzt werden eine Instanz zu erschaffen. Dann wird eine eigene Methode hinzugefügt, die die eigentliche Singleton Logik enthält. In PHP kann eine Klasse über einen Konstruktor oder per Cloning erstellt werden. Natürlich könnte man sich da noch weitere fiese Dinge überlegen eine Klasseninstanz zu erzeugen, aber __construct und __clone sind nunmal die normalen Vorgehensweisen.

Die Methode, die einem die Instanz der Klasse gibt, nennt man getInstance. Dieser Name hat sich sprachunabhängig in der Singleton Nutzung etabliert. Nun kommen wir auch schon zu einem Beispielquelltext.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Singleton
{
  private static $instance;
 
  // Konstruktor ueberschreiben
  private function __construct( ) {
  }
 
  // Cloning verhindern
  private function __clone( ) {
  }
 
  public static function getInstance( )
  {
    // Instanz erzeugen, wenn nicht vorhanden
    if ( is_null( self::$instance ) ) {
      self::$instance = new self( );
    }
    return self::$instance;
  }
}

Stellt sich natürlich die Frage, wozu man so etwas benötigt. Eine beispielhafte Anwenung wäre eine DB Verbindung oder ein Manager für solche Verbindungen. Eine Loggerklasse bietet sich auch an.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.