- <?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();
- ?>
来源: http://www.phpxs.com/code/1003501/