si ça intéresse quelqu'un voici un petit sample de pattern observateur, avec le "traditionnel" thème d'une station météo ayant des vues différentes.
Je pense que le mieux reste de tester, en espérant que ça puisse servir à qqn.
Je précise que dans le cas de la version ci-dessous, c'est bien entendu uniquement compatible php5.
<?php
/**
* Interface: IObservateur
* Implementee par les observateurs
*/
interface IObservateur {
public function recoitNotification($oEmetteur, $oArguments);
}
/**
* Interface: IObserve
* Implementee par "l'observé"
*/
interface IObserve {
public function ajouteObservateur(IObservateur $observer);
}
/**
* Class: Meteo
* La classe qui notifie
*/
class Meteo implements IObserve {
/**
* ==========================================================================
* GROUP: Proprietes privees
* ==========================================================================
*
* Var: $_aObservateurs
* Liste des observateurs de meteo
*/
private $_aObservateurs = Array();
/**
* ==========================================================================
* GROUP: Mehodes publiques
* ==========================================================================
*
* Method: ajouteObservateur
*
* Parameters:
* IObservateur $oObservateur
*/
public function ajouteObservateur(IObservateur $oObservateur) {
$this->_aObservateurs[] = $oObservateur;
}
/**
* Method: changeTemperature
* Appele quand la temperature augmente ou baisse
*
* Parameters:
* float $nTemperature, la temperature en °
*/
public function changeTemperature($nTemperature) {
foreach ($this->_aObservateurs as $oObservateurs) {
$oObservateurs->recoitNotification(
$this,
Array('nTemperature' => $nTemperature)
);
}
}
}
/**
* Class: MeteoDigitale
* Une classe qui observe Meteo, avec un affichage digital (en theorie)
*/
class MeteoDigitale implements IObservateur {
public function recoitNotification($oEmetteur, $oArguments) {
print "[DIGITAL] La nouvelle température est de : ".$oArguments['nTemperature']."°<br />\n";
}
}
/**
* Class: MeteoImage
* Une classe qui observe Meteo, et affiche une image (en theorie)
*/
class MeteoImage implements IObservateur {
public function recoitNotification($oEmetteur, $oArguments) {
print "[IMAGE] La nouvelle température est de : ".$oArguments['nTemperature']."°<br />\n";
}
}
// ==========================================================================
// Utilisation:
// ==========================================================================
$meteo = new Meteo();
$meteo->ajouteObservateur(new MeteoDigitale());
$meteo->ajouteObservateur(new MeteoImage());
$meteo->changeTemperature(15);
// avec une variable en GET par exemple
if (isset($_GET['nTemperature'])) $meteo->changeTemperature($_GET['nTemperature']);
?>