Datenbankprogrammierung - PHP - Grundlagen
Das Composite-Entwurfsmuster in PHP
Das Composite -Entwurfsmuster gehört zur Gruppe der Strukturmuster. Das Composite-Entwurfsmuster fügt mehrere Objekte zu einer Baumstruktur zusammen und ermöglicht es, sie von außen wie ein einzelnes zu verwenden.
Um ein Composite-Entwurfsmuster in PHP zu implementieren, führen Sie folgende Schritte durch
1. Definieren Sie eine Schnittstelle für ein einzelnes Objekt des Baums, falls sie nicht bereits zuvor definiert wurde.
2. Implementieren Sie eine neue Klasse, die diese Schnittstelle erfüllt. Fügen Sie dieser Klasse eine weitere Methode hinzu, an die Sie beliebige Objekte übergeben können, die die Schnittstelle erfüllen. Speichen Sie die übergebenen Objekte als Array in einer Objekteigenschaft.
3. Implementieren Sie sämtliche von der Schnittstelle geforderten Methoden so, dass diese über die Kindobjekte iterieren und den Methodenaufruf der Reihe nach an jedes der Kinder weiterdelegieren.
4. Erzeugen Sie beliebige Objekte, um diese zu einem Baum zusammenzufügen.
5. Verwenden Sie in Ihrer Anwendung nun diesen Objektbaum anstelle eines einzelnen Objekts.
Wenn Sie diese Schritte befolgen, steht dem Einsatz von Composite-Entwurfsmustern nichts im Wege.
Mithilfe des folgenden Anwendungsbeispiels können Sie mehrere Filme in einer Filmliste verwalten. Die Klasse EinFilm stellt jeweils ein konkretes Objekt dar. Die Klasse DiverseFilme ist eine Gruppe von EinFilm-Objekten.
Beide Klassen können Filminformationen über den Filmtitel und Filmregie ausgeben. EinFilm enthält lediglich Informationen über einen Film, DiverseFilme enthält Informationen über die Filme in der Filmliste.
Beide Klassen verfügen über die Methoden hinzufuegen() und entfernen(). Diese sind jedoch lediglich in der Klasse DiverseFilme einsetzbar. Die EinFilm-Klasse liefert FALSE, falls diese Methoden verwendet werden sollten.
Beispiel - FilmArchiv.php
<?php
abstract class FilmArchiv
{
abstract protected function getFilmInfo($vorherigerFilm);
abstract protected function getFilmAnzahl();
abstract protected function setFilmAnzahl($neuer_zaehler);
abstract protected function hinzufuegen($einFilm);
abstract protected function entfernen($einFilm);
}
?>
Beispiel - EinFilm.php
<?php
include_once('FilmArchiv.php');
class EinFilm extends FilmArchiv
{
private $titel;
private $regie;
public function __construct($titel, $regie)
{
$this->titel = $titel;
$this->regie = $regie;
}
public function getFilmInfo($film_auswahl)
{
if (1 == $film_auswahl)
{
return $this->titel . " von " . $this->regie;
}
else
{
return FALSE;
}
}
public function getFilmAnzahl()
{
return 1;
}
public function setFilmAnzahl($neuer_zaehler)
{
return FALSE;
}
public function hinzufuegen($einFilm)
{
return FALSE;
}
public function entfernen($einFilm)
{
return FALSE;
}
}
?>
Beispiel - DiverseFilme.php
Ganzen Artikel lesen...
<?php
include_once('FilmArchiv.php');
class DiverseFilme extends FilmArchiv
{
private $filmListe = array();
private $filmAnzahl;
public function __construct()
{
$this->setFilmAnzahl(0);
}
public function getFilmAnzahl()
{
return $this->filmAnzahl;
}
public function setFilmAnzahl($neuer_zaehler)
{
$this->filmAnzahl = $neuer_zaehler;
}
public function getFilmInfo($film_auswahl)
{
if ($film_auswahl <= $this->filmAnzahl)
{
return $this->filmListe[$film_auswahl]->getFilmInfo(1);
}
else
{
return FALSE;
}
}
public function hinzufuegen($einFilm)
{
$this->setFilmAnzahl($this->getFilmAnzahl() + 1);
$this->filmListe[$this->getFilmAnzahl()] = $einFilm;
return $this->getFilmAnzahl();
}
public function entfernen($einFilm)
{
$counter = 0;
while (++$counter <= $this->getFilmAnzahl())
{
if ($einFilm->getFilmInfo(1) ==
$this->filmListe[$counter]->getFilmInfo(1))
{
for ($i = $counter; $i < $this->getFilmAnzahl(); $i++)
{
$this->filmListe[$i] = $this->filmListe[$i + 1];
}
$this->setFilmAnzahl($this->getFilmAnzahl() - 1);
}
}
return $this->getFilmAnzahl();
}
}
?>
Beispiel - Anwendung
<?php
include_once('FilmArchiv.php');
include_once('EinFilm.php');
include_once('DiverseFilme.php');
$ersterFilm = new EinFilm("King Kong", "James Cameron");
echo "Erster Film - Filminfo: ";
echo $ersterFilm->getFilmInfo(1);
echo "<br>";
$zweiterFilm = new EinFilm("Star Wars", "George Lucas");
echo "Zweiter Film - Filminfo: ";
echo $zweiterFilm->getFilmInfo(1);
echo "<br>";
$dritteFilm = new EinFilm("Indiana Jones", "Steven Spielberg");
echo "Dritter Film - Filminfo: ";
echo $dritteFilm->getFilmInfo(1);
echo "<br>";
echo "<p>***Filmliste***</p>";
$filme = new DiverseFilme();
$filmeCount = $filme->hinzufuegen($ersterFilm);
echo "Erster Film in der Filmliste - Filminfo: <br>";
echo $filme->getFilmInfo($filmeCount);
echo "<br><br>";
$filmeCount = $filme->hinzufuegen($zweiterFilm);
echo "Zweiter Film in der Filmliste - Filminfo: <br>";
echo $filme->getFilmInfo($filmeCount);
echo "<br><br>";
$filmeCount = $filme->hinzufuegen($dritteFilm);
echo "Dritter Film in der Filmliste - Filminfo: <br>";
echo $filme->getFilmInfo($filmeCount);
echo "<br><br>";
$filmeCount = $filme->entfernen($ersterFilm);
echo "Ersten Film aus Filmliste entfernen - Filme Anzahl: <br>";
echo $filme->getFilmAnzahl();
echo "<br><br>";
echo "Übrige Filme aus der Filmliste - Filminfo zu 1: <br>";
echo $filme->getFilmInfo(1);
echo "<br><br>";
echo "Übrige Filme aus der Filmliste - Filminfo zu 2: <br>";
echo $filme->getFilmInfo(2);
echo "<br><br>";
?>
Ausgabe
Erster Film - Filminfo: King Kong von James Cameron
Zweiter Film - Filminfo: Star Wars von George Lucas
Dritter Film - Filminfo: Indiana Jones von Steven Spielberg
***Filmliste***
Erster Film in der Filmliste - Filminfo:
King Kong von James Cameron
Zweiter Film in der Filmliste - Filminfo:
Star Wars von George Lucas
Dritter Film in der Filmliste - Filminfo:
Indiana Jones von Steven Spielberg
Ersten Film aus Filmliste entfernen - Filme Anzahl:2
Übrige Filme aus der Filmliste - Filminfo zu 1:
Star Wars von George Lucas
Übrige Filme aus der Filmliste - Filminfo zu 2:
Indiana Jones von Steven Spielberg
Die passende Ergänzung zu diesem Artikel:
 | PHP5 - Objektorientierte Programmierung Produktart: Buch ISBN 978-3-7723-4247-9 Direkt Downloaden
29,99 € 
|

Matthias Kannengiesser
Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen