SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=257&group=44&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Entwurfsmuster (Design Patterns)


Die Idee der Entwurfsmuster wurde in der Softwareentwicklung aus der Architektur übernommen. Erich Gamma, Mitte der neunziger Jahre Wissenschaftler an der Hochschule in Zürich, promovierte über die Übertragung dieser Methode auf die Softwareentwicklung. Im Anschluss ging er nach Amerika, wo er zusammen mit Richard Helm, Ralph Johnson und John Vlissides das Buch »Design Patterns – Elements of Reusable Design« herausbrachte. Dieses Autorenquartett hat sich den Spitznamen »Gang of Four« (Viererbande) eingehandelt. GoF wird gelegentlich auch als Verweis für besagtes Buch verwandt. In der Architektur ist die Idee, Entwurfsmuster zu verwenden, aber bei Weitem nicht so verbreitet wie in der Softwareentwicklung.

Ein Entwurfsmuster beschreibt in Textform eine in der Praxis erfolgreiche Lösung für ein mehr oder weniger häufig auftretendes Entwurfsproblem. Die Beschreibung eines Entwurfsmusters folgt gewissen Regeln:

Der primäre Nutzen eines Entwurfsmusters liegt in der Beschreibung einer Lösung für eine bestimmte Klasse von Problemen. Weiterer Nutzen ergibt sich aus der Tatsache, dass jedes Muster einen Namen hat. Dies vereinfacht die Diskussion unter Softwareentwicklern, da man abstrahiert über eine Softwarestruktur sprechen kann. So sind Entwurfsmuster zunächst einmal sprachunabhängig.

Wenn der Einsatz von Entwurfsmustern dokumentiert wird, ergibt sich ein weiterer Nutzen dadurch, dass aufgrund der Beschreibung des Musters ein Bezug hergestellt wird zur dort vorhandenen Diskussion des Problemkontextes und den Vor- und Nachteilen der Lösung.

Moderne Hochsprachen unterstützen einige der gängigen Entwurfsmuster bereits mit bestimmten Sprachmitteln, sodass man sich in der Praxis vor allem bei der Nutzung moderner Sprachen im Prozess der objektorientierten Analyse (OOA) und des objektorientierten Designs (OOD) der Entwurfsmuster bedient, die dort unter Umständen noch immer implementationsneutral in der Unified Modeling Language (UML) angewandt werden.

Im Lauf der Zeit wurden Lösungen für bestimmte Probleme gefunden, die erfolgreich eingesetzt wurden und somit einen Katalog mit insgesamt 23 Entwurfsmustern bildeten. Laut GoF lassen sich sämtliche Entwurfsmuster in folgende drei grundlegende Mustergruppen zusammenfassen:

Zu den bekanntesten Entwurfsmustern gehören unter anderem der Model View Controler (MVC), das Actor-Role Pattern und das Singleton Pattern.

Hinweis: Patterns sollen den Entwickler bei seiner Arbeit unterstützen. Die Aufgabe des Entwicklers besteht somit nicht mehr darin, das Rad neu zu erfinden, sondern vielmehr darin, das passende Rad zu verwenden.

Was Patterns nicht sind...

Für eine Vielzahl von Entwicklern sind Entwurfsmuster aus der Anwendungsentwicklung nicht mehr wegzudenken. Sollten auch Sie sich näher mit Entwurfsmustern auseinandersetzen wollen, dann gilt es Folgendes zu beachten, um Missverständnisse von vornherein zu vermeiden:


Singleton-Entwurfsmuster

Das Singleton-Entwurfsmuster ist ein in der Softwareentwicklung eingesetztes Muster und gehört zur Gruppe der Erzeugungsmuster. Es stellt sicher, dass zu einer Klasse nur genau ein Objekt erzeugt werden kann, und ermöglicht einen globalen Zugriff auf dieses Objekt.

Das Entwurfsmuster findet Verwendung, wenn nur ein Objekt zu einer Klasse existieren darf und ein einfacher Zugriff auf dieses Objekt benötigt wird, oder wenn das einzige Objekt durch Unterklassenbildung spezialisiert werden soll.

In der Praxis wird diese Technik verwendet, um Ressourcen schonend zu programmieren. Verbindungen zu Ressourcen, die nur einmalig vorhanden sind, wie beispielsweise Dateien, werden über Singleton-Klassen verwaltet.

Weitere Anwendungsbeispiele sind:
{PSP}Die folgende Singleton-Klasse soll Ihnen den Einstieg in die Welt der Entwurfsmuster erleichtern.

Beispiel – Singleton (Entwurfsmuster)

<?php
class Singleton
{

  static private $instance = false;
  private $text = 'Keine Meldung im Objekt';

  private function __construct() {}

  static function instance()
  {
     if(!Singleton::$instance)
     {
        Singleton::$instance = new Singleton();
     }
     return Singleton::$instance;
  }

  function setText($text)
  {
     $this->text = $text;
  }

  function getText()
  {
     return $this->text;
  }
}

class Einchecken
{
  function __construct()
  {
     $single = Singleton::instance();
     $single->setText('Sie sind herzlich Willkommen!');
  }
}

class Auschecken
{
  function __construct()
  {
     $single = Singleton::instance();
     $single->setText('Auf wiedersehen!');
  }
}

$single = Singleton::instance();
echo $single->getText() . "<br />";

$passagier = new Einchecken();
echo $single->getText() . "<br />";

$passagier = new Auschecken();
echo $single->getText() . "<br />";
?>

Ausgabe
Keine Meldung im Objekt
Sie sind herzlich Willkommen!
Auf wiedersehen!

Das Beispiel nutzt in jeder Klasse, die Singleton verwendet, immer wieder dasselbe Objekt, da eine erneute Erzeugung im Rahmen eines einfachen Methodenaufrufs völlig sinnlos wäre – man hätte am Ende nur eine Anzahl verwaister Objekte im Speicher.