| Weitere Artikel aus dem Webentwickler Blog |
| Teilen |
Datenbankprogrammierung - PHP - Grundlagen
Das Factory-Entwurfsmuster in PHP
Die Factory-Methode gehört zur Gruppe der Erzeugungsmuster. Das Entwurfsmuster definiert eine Schnittstelle zur Erzeugung von Objekten. Es verlagert dabei die eigentliche Instanzierung in Unterklassen und lässt die Unterklassen entscheiden, welche konkreten Implementierungen verwendet werden.
Konventionen der Factory-Methode:
Um ein Factory-Methoden-Entwurfsmuster in PHP zu implementieren, führen Sie folgende Schritte durch:
1. Implementieren Sie eine abstrakte Klasse, in der Sie eine oder mehrere abstrakte Methoden deklarieren, die die Schnittstelle zum Erzeugen von Objekten vorgeben.
2. Fügen Sie dieser Klasse weitere Methoden hinzu, deren Logik bei allen konkreten Implementierungen identisch ist. Sie können in diesen Methoden bereits auf die abstrakte Fabrikmethode zugreifen.
3. Bilden Sie beliebig viele Unterklassen, in denen Sie verschiedene Implementierungen der abstrakten Methode einfügen.
4. Verwenden Sie nun diese konkreten Unterklassen, um die tatsächlichen Objekte zu instanzieren und Ihren Applikationscode von den konkreten Implementierungen zu lösen.
Wenn Sie diese Schritte befolgen, steht dem Einsatz von Factory-Methoden-Entwurfsmustern nichts im Wege. Mithilfe des folgenden Anwendungsbeispiels können Sie einen »virtuellen« Verlag erzeugen. Dieser ist in der Lage, beliebig viele Bücher zu produzieren.
Beispiel - Buch-Klasse (buch.php)
<?php
require_once 'Produkte.php';
class Buch implements Produkte {
protected $verlag;
protected $titel;
protected $preis;
protected $verkauft = false;
protected $verpackt = false;
public function __construct($verlag, $titel, $preis = 0)
{
$this->verlag = $verlag;
$this->titel = $titel;
$this->preis = $preis;
}
public function berechneMwst($steuersatz)
{
if ($this->preis < 0)
{
return false;
}
$this->preis = $this->preis + round(($this->preis * $steuersatz),2);
return true;
}
public function verpacken()
{
$this->verpackt = true;
return $this->verpackt;
}
public function getVerlag()
{
return $this->verlag;
}
public function getTitel()
{
return $this->titel;
}
public function getPreis()
{
return $this->preis;
}
public function getVerpackt()
{
return $this->verpackt;
}
}
?>
Beispiel - Produkte-Interface (Produkte.php)
<?php
interface Produkte
{
public function berechneMwst($steuersatz);
public function verpacken();
public function getVerlag();
public function getTitel();
public function getPreis();
public function getVerpackt();
}
?>
Beispiel - AbstractHersteller.php
<?php
abstract class AbstractHersteller
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
public function verkaufeBuch($titel, $preis, $steuersatz)
{
$produkt = $this->produziereBuch($titel, $preis);
$produkt->verpacken();
$produkt->berechneMwst($steuersatz);
return $produkt;
}
abstract protected function produziereBuch($titel, $preis);
}
?>
Beispiel - BuchHersteller.php
Ganzen Artikel lesen...




































