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.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close