• 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");//发送消息到观察者
    
  • 相关阅读:
    TeXLive安装过程
    js 如何获取class的元素 以及创建方法getElementsByClassName
    点击返回
    MVC框架实现文件的上传(支持多文件上传)
    团购倒计时抢购功能
    获取取当前页 地址分割字符串
    网页内容截取部分打印
    HttpFileCollection 实现多文件上传
    JS如何获取URL
    正则表达式 占位符 替换
  • 原文地址:https://www.cnblogs.com/taozi32/p/9226806.html
Copyright © 2020-2023  润新知