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 ConcreteObserver implements Observer { /** * 观察者的名称 * @var <type> */ private $_name; public function __construct($name) { $this->_name = $name; } /** * 更新方法 */ public function update() { echo 'Observer', $this->_name, ' has notified.<br />'; } } //实例化类: $subject = new ConcreteSubject(); /* 添加第一个观察者 */ $observer1 = new ConcreteObserver('Martin'); $observer2 = new ConcreteObserver('phppan'); $subject->attach($observer1); //添加第一个观察者 $subject->attach($observer2); //添加第二个观察者 $subject->detach($observer1); //删除第一个观察者 $subject->notifyObservers();
/** * Main program. */ public static function main() { $subject = new ConcreteSubject(); /* 添加第一个观察者 */ $observer1 = new ConcreteObserver("Martin"); $subject->attach($observer1); echo "\nThe First notify:\n"; $subject->notifyObservers(); /* 添加第二个观察者 */ $observer2 = new ConcreteObserver("phppan"); $subject->attach($observer2); echo "\nThe Second notify:\n"; $subject->notifyObservers(); /* 删除第一个观察者 */ $subject->detach($observer1); echo "\nThe Third notify:\n"; $subject->notifyObservers(); }