public function __construct() { echo "Tworzenie 3 konkretnych obserwatorów i konkretnego podmiotu <BR>"; $ob1 = new ConcreteObserver(); $ob2 = new ConcreteObserver(); $ob3 = new ConcreteObserver(); $subject = new ConcreteSubject(); $subject->setObservers(); $subject->setData("Oto twoje dane!"); $subject->attach($ob1); $subject->attach($ob2); $subject->attach($ob3); $subject->notify(); echo "Odpięcie obserwatora ob3. Powiadamiane będą ob1 i ob2<BR>"; $subject->detach($ob3); $subject->notify(); echo "Reset danych, podpięcie ob3 i dopięcie ob2, tylko ob1 i ob3 będą powiadamiane: <BR>"; $subject->setData("Dane dla obiektów ob1 i ob3"); $subject->attach($ob3); $subject->detach($ob2); $subject->notify(); }
*/ class ConcreteSubject extends Subject { public $state; } /* * 具体观察者 */ class ConcreteObserver extends Observer { private $_name; private $_subject; public function __construct($name, Subject $subject) { $this->_name = $name; $this->_subject = $subject; } public function update() { var_dump(sprintf('观察者:%s,通知者的状态是:%s,请做出相应的反应。', $this->_name, $this->_subject->state)); } } ################################################################################### $concreteSubject = new ConcreteSubject(); //通知者 $concreteObserver = new ConcreteObserver('张三', $concreteSubject); //观察者 $concreteSubject->attach($concreteObserver); $concreteSubject->state = 'abc'; $concreteSubject->notify();
{ echo 'I must have supper.I am so hungry.<br />'; } } class Observer3 extends AbstractObserver { function action() { echo 'I must go to bed.<br />'; } } class Observer4 extends AbstractObserver { function action() { echo 'I will go to see my classmate tomorrow.<br />'; } } //test $subject = new ConcreteSubject(); $subject->add('Observer1'); $subject->add('Observer2'); $subject->add('Observer3'); $subject->notify(9); var_dump($subject->__get('observers')); $subject->add('Observer4'); var_dump($subject->__get('observers')); $subject->notify(10); $subject->splice('Observer2'); var_dump($subject->__get('observers')); $subject->notify(14);