Created by
Zsolt Bodnár
| <?php
interface iSubject {
public function Attach($observer);
public function Detach($observer);
public function Notify();
}
class ConcreteSubject implements iSubject {
private $_subjectState = "";
private $_observers = array();
public function Attach($observer) {
$this->_observers[] = $observer;
}
public function Detach($observer) {
$eredmeny = array_search($observer, $_observers);
if ($eredmeny !== false) {
unset($_observers[$observer]);
}
}
public function Notify() {
foreach ($this->_observers as $obs) {
$obs->Update($this);
}
}
public function getSubjectState() {
return $this->_subjectState;
}
public function setSubjectState($value) {
$this->_subjectState = $value;
}
}
interface iObserver {
public function Update(ConcreteSubject $subject);
}
class ConcreteObserver implements iObserver {
private $_name = "";
private $_observerState = "";
// private $_subject = NULL ; // ConcreteSubject
function __construct($name) {
$this->_name = $name;
}
public function Update(ConcreteSubject $subject) {
// var_dump($subject);
$this->_observerState = $subject->getSubjectState();
echo "Az " . $this->_name . " megfigyelő új állapota " . $this->_observerState . "." . PHP_EOL;
}
}
$s = new ConcreteSubject();
$s->Attach(new ConcreteObserver("A"));
$s->Attach(new ConcreteObserver("B"));
$s->setSubjectState("ABC");
$s->Notify();
$s->setSubjectState("QWE");
$s->Notify();
|