Example #1
0
 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();
 }
Example #2
0
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();
Example #3
0
 /**
  * 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();
 }