Weitere Artikel aus dem Webentwickler Blog
Datenbankprogrammierung - PHP - Grundlagen

 

 

Das Subject/Observer-Muster in PHP

Das  Subject/Observer -Entwurfsmuster gehört zur Gruppe der Verhaltensmuster. Dieses Entwurfsmuster ist aufgeteilt in einen Beobachter ( Observer ) und ein Subjekt ( Subject ), das überwacht werden soll. Das Entwurfsmuster definiert dabei eine Eins-zu-n -Abhängigkeit zwischen einem Subjekt und beliebig vielen Beobachtern. Wenn sich der Zustand des Objekts ändert, werden die unabhängigen Objekte automatisch benachrichtigt.

 

 

Das Subject/Observer-Muster in PHPDie Konventionen für das Subject/Observer-Modell

 

 

 

 

  • Subject - Definiert die Schnittstelle für das zu überwachende Objekt.
  • Observer - Definiert die Schnittstelle für die Überwacherobjekte.
  • ConcreteSubject- Enthält die konkrete Objekt-Implementierung des zu überwachenden Objekts.
  • ConcreteObserver - Enthält die konkrete Objekt-Implementierung für die Überwacherobjekte.

 

Um ein Subject/Observer-Entwurfsmuster in PHP zu implementieren, führen Sie folgende Schritte durch:

1. Definieren Sie eine Schnittstelle für die Observer, die eine Methode bereitstellt, mit der die Beobachter über eine Statusänderung informiert werden können.

2. Definieren Sie eine Schnittstelle für die zu beobachtenden Objekte (Subjects). Diese Schnittstelle muss das Hinzufügen sowie das Entfernen von Observern erlauben und eine Methode notify() fordern, mit der die Observer über eine Statusänderung informiert werden.

3. Implementieren Sie im zu beobachtenden Objekt die Subject-Schnittstelle.

4. Fügen Sie in den Methoden, die den Zustand des Objekts ändern, den Aufruf der notify()-Methode ein.

5. Implementieren Sie konkrete Objekte.

Wenn Sie diese Schritte befolgen, steht dem Einsatz von Subject/Observer-Entwurfs­mustern nichts im Wege.

 

Beispieldatei PersonalLift.php

<?php

require_once 'Fahrstuhl.php';
require_once 'Subject.php';

class PersonalLift implements Fahrstuhl, Subject
{
protected $hersteller;
protected $model;
protected $meter;

protected $generatorAktiv = false;
protected $observers = array();

public function __construct($hersteller, $model, $meter = 0)
{
$this->hersteller = $hersteller;
$this->model = $model;
$this->meter = $meter;
}

public function __destruct()
{
if ($this->generatorAktiv)
{
$this->stopGenerator();
}
}

public function startGenerator()
{
$this->generatorAktiv = true;
}


public function fahren($meter)
{

if ($this->generatorAktiv !== true)
{
return false;
}

$this->meter = $this->meter + $meter;
$this->notify();
return true;
}


public function stopGenerator()
{
$this->generatorAktiv = false;
}


public function getHersteller()
{
return $this->hersteller;
}


public function getModel()
{
return $this->model;
}

public function getMeter()
{
return $this->meter;
}


public function attach(Observer $observer)
{
$this->observers[] = $observer;
}


public function detach(Observer $observer)
{
for ($i = 0; $i < sizeof($this->observers); $i++)
{
if ($this->observers[$i] === $observer)
{
unset($this->observers[$i]);
}
}
}


public function notify()
{
foreach ($this->observers as $observer)
{
$observer->update($this);
}
}
}
?>

 

Beispieldatei Fahrstuhl.php

<?php

interface Fahrstuhl
{
public function startGenerator();
public function fahren($meter);
public function stopGenerator();
public function getMeter();
public function getHersteller();
public function getModel();
}

?>

 

Beispieldatei Subject.php

<?php

interface Subject
{
public function attach(Observer $observer);
public function detach(Observer $observer);
public function notify();
}

?>

 

Beispieldatei Observer.php

Ganzen Artikel lesen... 

Kundenkommentare
Social Bookmarks
elo-web bookmarken bei: Mr. Wong elo-web bookmarken bei: Webnews elo-web bookmarken bei: Icio elo-web bookmarken bei: Oneview elo-web bookmarken bei: Yigg elo-web bookmarken bei: Linkarena elo-web bookmarken bei: Digg elo-web bookmarken bei: Reddit elo-web bookmarken bei: Simpy elo-web bookmarken bei: StumbleUpon elo-web bookmarken bei: Netscape elo-web bookmarken bei: Furl elo-web bookmarken bei: Yahoo elo-web bookmarken bei: Blogmarks elo-web bookmarken bei: Diigo elo-web bookmarken bei: Technorati elo-web bookmarken bei: Newsvine elo-web bookmarken bei: Blinkbits elo-web bookmarken bei: Ma.Gnolia elo-web bookmarken bei: Smarking elo-web bookmarken bei: Netvouz elo-web bookmarken bei: Folkd elo-web bookmarken bei: Spurl elo-web bookmarken bei: Google elo-web bookmarken bei: Blinklist
URL zu dieser Seite
Einfach den Quelltext kopieren und auf Ihrer Webseite einbinden

Kontakt
Newsletter | Kontakt | RSS Feed
Warenkorb: 0 Artikel
Gesamtwert: EUR 0,00
Home PHP/MySQL & JavaScript  Das Subject/Observer-Muster in PHP