Dzień dobry,
Natknalem sie dzisiaj na wzorzec obserwator i postanowilem napisac mikro kod, który pomógłby mi zrozumieć ten mechanizm. Proszę i podpowiedź czy dobrze go rozumiem i probuje zastosować w tym przykładzie.
<?php
interface Observe{public function update($obj);}
class addToBase implements Observe{
public $name = 'Obserwator1';
public function update($obj){
echo "\n \ndodaje tekst do bazy : ".$obj->text;
}
}
class addToXml implements Observe{
public $name = 'Obserwator2';
public function update($obj){
echo "\n \ndodaje tekst do pliku XML : ".$obj->text;
}
}
class readText{
public $observes;
private $_data;
public function __set($name, $value){
$this->_data[$name] = $value;
}
public function __get($name){
if(isset($this->_data[$name])){
return $this->_data[$name];
}
return null;
}
public function addObs(Observe $obs){
$this->observes[md5($obs->name)] = $obs;
}
public function notify(){
foreach($this->observes as $obs){
$obs->update($this);
}
}
public function read($txt){
$this->text = $txt;
echo "czytam tekst: ".$txt;
$this->notify();
}
}
$txt = new readText();
$txt->addObs(new addToBase());
$txt->addObs(new addToXML());
$txt->read('To ten tekst do przeczytania');
Krótki opis:
Klasa wyposażona w metode do pisania tekstu, dodatkowo może go dodać do xml lub bazy, jednakże zamiast pisać w niej metody, które mi na to pozwola uzyłem obserwatorów, ktorych będę mógł także uzyć w innym wypadku.
Zastanawia mnie też czy w dobry sposób przekazuje dane do zapisania ( w tym wypadku tekst ), uzyłem magicznego gettera oraz settera żeby nie musiec pisać geta oraz seta jako metodę do przekazywania takich danych.