• php设计模式(3)-观察者模式


    <?php

    class User implements SplSubject{
    public $loginNum;
    public $hobby;
    public $observers = null;

    public function __construct($hobby){
    $this->loginNum = rand(1,10);
    $this->hobby = $hobby;
    $this->observers = new SplObjectStorage();
    }
    public function attach(SplObserver $observer){
    $this->observers->attach($observer);
    }
    public function detach(SplObserver $observer){
    $this->observers->detach($observer);
    }
    public function notify(){
    $this->observers->rewind();
    while($this->observers->valid()){
    $observer = $this->observers->current();
    $observer->update($this);
    $this->observers->next();
    }
    }
    public function login(){
    $this->notify();
    }

    }

    class Secrity implements SplObserver{
    public function update(SplSubject $subject){
    echo "第".$subject->loginNum."次登陆";
    }
    }

    class Ad implements SplObserver{
    public function update(SplSubject $subject){
    echo "爱好".$subject->hobby;
    }
    }

    $user = new User("篮球");
    $user->attach(new Secrity());
    $user->attach(new Ad());
    $user->login();

    下面通过观察者模式实现登陆

    index.php

    <html>
    <head></head>
    <body>
    <form action="main.php" method="post">
    姓名:<input type="text" name="name"/><br/>
    密码:<input type="password" name="password"/>
    <input type="submit" value="登陆"/>
    </form>

    </body>
    </html>

    main.php

    <?php

    class User implements SplSubject{
    public $name;
    public $password;
    public $observers = null;

    public function __construct($name,$password){
    $this->name = $name;
    $this->password = $password;
    $this->observers = new SplObjectStorage();
    }
    public function attach(SplObserver $observer){
    $this->observers->attach($observer);
    }
    public function detach(SplObserver $observer){
    $this->observers->detach($observer);
    }
    public function notify(){
    $this->observers->rewind();
    while($this->observers->valid()){
    $observer = $this->observers->current();
    $observer->update($this);
    $this->observers->next();
    }
    }
    public function login(){
    $this->notify();
    }

    }

    class Validate implements SplObserver{
    public function update(SplSubject $subject){
    if($subject->name=="shenming" && $subject->password=="shenm"){
    echo "success";
    }else{
    echo "false";
    }
    }
    }


    $name=$_POST['name'];
    $password=$_POST['password'];
    $user = new User($name,$password);
    $user->attach(new Validate());
    $user->login();

  • 相关阅读:
    iOS 循环引用 委托 (实例说明)
    【iOS】自动引用计数 (循环引用)
    有关UITableviewCell 重用内存 内部解析
    通用的类->可直接存储的Dictionary,可以被JSON或NSUserDefaults
    ipa 发布到stroe
    根据当前登录域账号 获取AD用户姓名和所在OU目录
    ASP.NET MVC 操作AD 获取域服务器当前用户姓名和OU信息
    各种图标 资源下载
    【赚】cocos2d-x学习资源汇总(持续更新。。。)
    ios网络层优化深入浅出
  • 原文地址:https://www.cnblogs.com/shenming/p/4217002.html
Copyright © 2020-2023  润新知