Maison >php教程 >PHP源码 >PHP实现观察者模式

PHP实现观察者模式

PHP中文网
PHP中文网original
2016-05-25 17:14:37891parcourir

PHP实现观察者模式

<?php
interface Message {
   static function getType();
};

interface Observer {
   function notifyMsg(Message $msg);
};

class Subject {
   private $observers = Array();

   public function registerObserver(Observer $observer, $msgType) {
    $this->observers[$msgType][] = $observer;   // wyh?
   }

   private function notifyMsg(Message $msg) {
    @$observers = $this->observers[$msg->getType()];
    if (!$observers) {
     return;
    }

    foreach ($observers as $observer) {
     $observer->notifyMsg($msg);
    }
   }

   public function someMethod() {
           sleep(1);
          $this->notifyMsg(new HelloMessage("Michael"));
        }

}

class HelloMessage implements Message {
   private $name;

   public function __construct($name) {
    $this->name = $name;
   }

   public function getMsg() {
    return "Hello,$this->name!";
   }

   static function getType() {
    return "HELLO_TYPE";
   }
}

class SubObserver implements Observer {
   public function notifyMsg(Message $msg) {
    if ($msg instanceof HelloMessage) {
     echo $msg->getMsg();
    }
   }
}

$subject = new Subject();
    $observer = new SubObserver();
    $subject->registerObserver($observer, HelloMessage::getType());
    $subject->someMethod();

?>


以上就是PHP实现观察者模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:PHP缩略图,满窗格等比例缩小Article suivant:时间比较问题