PHP设计模式 - 观察者模式

Posted Share112

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP设计模式 - 观察者模式相关的知识,希望对你有一定的参考价值。

某个对象可以被设置为是可观察的,只要通过某种方式允许其他对象注册为观察者。每当被观察的对象改变时,会发送信息给观察者。

 

<?php

    interface IObserver{
        function onSendMsg( $sender, $args );
        function getName();
    }

    interface IObservable{
        function addObserver( $observer );
    }

    class UserList implements IObservable{
        private $_observers = array();

        public function sendMsg( $name ){
            foreach( $this->_observers as $obs ){
                $obs->onSendMsg( $this, $name );
            }
        }

        public function addObserver( $observer ){
            $this->_observers[]= $observer;
        }

        public function removeObserver($observer_name) {
            foreach($this->_observers as $index => $observer) {
                if ($observer->getName() === $observer_name) {
                    array_splice($this->_observers, $index, 1);
                    return;
                }
            }
        }
    }

    class UserListLogger implements IObserver{
        public function onSendMsg( $sender, $args ){
            echo( "‘$args‘ send to UserListLogger
" );
        }

        public function getName(){
            return ‘UserListLogger‘;
        }
    }

    class OtherObserver implements IObserver{
        public function onSendMsg( $sender, $args ){
            echo( "‘$args‘ send to OtherObserver
" );
        }

        public function getName(){
            return ‘OtherObserver‘;
        }
    }


    $ul = new UserList();//被观察者
    $ul->addObserver( new UserListLogger() );//增加观察者
    $ul->addObserver( new OtherObserver() );//增加观察者
    $ul->sendMsg( "Jack" );//发送消息到观察者

    $ul->removeObserver(‘UserListLogger‘);//移除观察者
    $ul->sendMsg("hello");//发送消息到观察者

 

以上是关于PHP设计模式 - 观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

PHP 设计模式之观察者模式

PHP观察者模式

设计模式之观察者模式--PHP

PHP设计模式笔记七:观察者模式 -- Rango韩老师 http://www.imooc.com/learn/236

php--观察者模式