
Druckansicht von http://www.php-homepage.de/manual/language.oop5.patterns.php
PatternPattern sind eine Möglichkeit, um optimale Verfahren und gute Entwürfe zu beschreiben. Sie zeigen eine flexible Lösung für verbreitete Programierprobleme. FactoryDas Factory-Pattern erlaubt die Instanziierung von Objekten zur Laufzeit. Es wird Factory-Pattern genannt, weil es für die "Herstellung" eines Objektes zuständig ist. Eine parametrisierte Factory bekommt den Namen der zu instanziierenden Klasse als Parameter übergeben. Beispiel #1 Parametrisierte Factory-Methode
<?phpWenn diese Methode in einer Klasse definiert wird, erlaubt sie dieser, Treiber bei Bedarf zu laden. Wenn die Example-Klasse eine Datenbankabstraktionsklasse wäre, könnte das Laden eines MySQL- und SQLite-Treibers wie folgt aussehen:
<?phpSingletonDas Singleton stellt sicher, dass es nur eine Instanz einer Klasse geben kann; es stellt eine globale Zugriffsmöglichkeit zu dieser Instanz bereit. Singleton ist ein Pattern der "Gang of Four". Das Singleton-Pattern wird oft implementiert in Datenbankklassen, Loggern, Front-Controllern oder Request- und Response-Objekten. Beispiel #2 Singleton-Funktion
<?phpIllustrated below is how the Singleton behaves
<?phpWarnung
Das Singleton-Pattern ist eines der kontrovers betrachteten Pattern. Kritiker argumentieren, dass Singletons zu globale Zuständen in Applikationen führen und dass sie das Singleton und die benutzenden Klassen eng koppeln. Somit entstehen versteckte Abhängigkeiten und unerwartete Seiteneffekte, woraus wiederum Code entsteht, der schwierig zu testen und zu warten ist. Die Kritiker argumentieren außerdem, dass es sinnlos ist, ein Singleton in einer Shared-Nothing-Architektur wie PHP einzusetzen, in der Objekte nur innerhalb eines Requests eindeutig sind. Es ist einfacher und sauberer, Kollaborations-Objektgraphen zu erstellen, indem die Builder- und Factory-Pattern am Anfang eines Requests benutzt werden. Singletons verstoßen außerdem gegen die "SOLID"-OOP-Design-Regeln und gegen das Gesetz von Demeter. Singletons können nicht serialisiert werden. Sie können nicht durch Subtypen ersetzt werden (vor PHP 5.3) und sie werden auch nicht bei der Garbage-Collection berücksichtigt, weil die Instanz als statisches Attribut des Singletons gespeichert wird. |