zoukankan      html  css  js  c++  java
  • PHP观察者模式的简单实现

    PHP5.0以上版本内置了观察者模式的实现。

    观察者模式应用的场景:

    1,比如新增加用户的时候,需要给用户发送邮件和短信进行通知。我们的主程序就是完成用户的增其,其他方法对进行发短信和通知。

    2,具体的代码使用如下

    <?php
    //一个观察者模式的实现,使用php内置的方法来实现
    //构建一个目标类,创建用户的时候,向用户发短息,发邮件。修改密码的时候向用户发短信
    class User implements  SplSubject
    {
        private $email;
        private $name;
        private $sex;
        private $observs;
            public function getEmail() {
                return $this->email;
            }
        
        
            public function getName() {
                return $this->name;
            }
        
        
            public function getSex() {
                return $this->sex;
            }
        
        
            public function setEmail($email) {
                $this->email = $email;
            }
        
        
            public function setName($name) {
                $this->name = $name;
            }
        
        
            public function setSex($sex) {
                $this->sex = $sex;
            }
        
        public function __construct($name,$email,$sex)
        {
            $this->name=$name;
            $this->email=$email;
            $this->sex=$sex;
            $this->observs=new SplObjectStorage();        
        }
        public function attach(SplObserver $observer)
         {
                $this->observs->attach($observer);
         }
        
        public function detach(SplObserver $observer) 
        {
            $this->observs->detach($observer);
        }
        
        public function notify() 
        {
                foreach($this->observs as $obs)
                {
                    $obs->update($this);
                }
        }
        public function crete()
        {
            echo "新增了一个名为{$this->name}的用户<br/>";
            $this->notify();
        }
        public function resetpwd()
        {
            echo "用户{$this->name}重置了密码<br/>";
            $this->notify();
        }
    }
    //观察者
    class sendmsg implements SplObserver
    {
        public function update(SplSubject  $subject) 
        {
                echo "我要发短信了,给用户{$subject->getName()}<br/>";
        }
    }
    class sendemail implements SplObserver
    {
        public function update(SplSubject  $subject)
        {
            echo "我给{$subject->getName()}发邮件了<br/>";
        }
    }
    
    
    //测试脚本
    $user=new User("小花猫","小花猫@小花猫","猫猫");
    $sendemail=new sendemail();
    $sendmsg=new sendmsg();
    $user->attach($sendemail);//注册发邮件的事件
    $user->attach($sendmsg);//发留言信息
    
    
    $user->crete();
    echo "我要重置密码<br/> ";
    $user->detach($sendmsg);
    $user->resetpwd();

    其中user方法实现了spl的接口splsubject,观察者实现了splObserver接口。对于spl是个什么东西,请参考http://www.php.net/spl   今天发现php.net改版了!现在一些东西在上边都很好找。

  • 相关阅读:
    c# 基础算法(一) 九九乘法
    万能模糊查询SQL
    C#通过连接ODBC的方式调用存储过程
    《从设计到模式》学习笔记part1
    C#知识归纳
    Python之路
    Tomcat优化
    Zabbix 3.0 + Nginx + Mariadb
    Spark DataFrame ETL教程
    Python连接presto
  • 原文地址:https://www.cnblogs.com/minbbp/p/3161208.html
Copyright © 2011-2022 走看看