资讯专栏INFORMATION COLUMN

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

neu / 2114人阅读

摘要:观察者模式被观察者接口用于与实现观察者设计模式用户登录次数限制用户爱好存放观察者们实际应用中,这里应该是从缓存或数据库中读取的数据实际应用中,这里应该是从缓存或数据库中读取的数据存储一组对象操作实现接口函数,用于添加一个观察者实

lognum = rand(1, 10);    //实际应用中,这里应该是从缓存或数据库中读取的数据
    $this->hobby = $hobby;          //实际应用中,这里应该是从缓存或数据库中读取的数据
    $this->observers = new SplObjectStorage();    //存储一组对象
  }

  public function login(){
    //todo:操作session
    $this->notify();
  }

  /**
   * 实现接口函数,用于添加一个“观察者”
   * @param SplObserver $observer
   */
  public function attach(SplObserver $observer)
  {
    $this->observers->attach($observer);
  }

  /**
   * 实现接口函数,用于删除一个“观察者”
   * @param SplObserver $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();                    //移动指针到下一对象
    }
  }
}

/**
 * 一个观察者 :负责登录安全验证
 * Class Security
 */
class Security implements SplObserver{
  public function update(SplSubject $subject)
  {
    if($subject->lognum < 3){
      echo  "这是第".$subject->lognum."次安全登录";
    }else{
      echo  "这是第".$subject->lognum."次异常登录";
    }
  }
}

/**
 * 另一个观察者 :负责获取用户特征
 * Class Character
 */
class Character implements SplObserver{
  public function update(SplSubject $subject){
    echo $subject->hobby."是个非常不错的爱好";
  }
}


//测试

$user = new User("学习");
$user->attach(new Security());
$user->attach(new Character());
$user->login();


#使用观察者模式,把登录的两种业务解耦。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23134.html

相关文章

  • PHP设计模式察者模式

    摘要:概念观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。观察者模式符合接口隔离原则,实现了对象之间的松散耦合。 概念 观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。 当一个对象状态发生改变后,会影响到其他几个对象的改变,这...

    phpmatt 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • PHP面试常考设计模式——建造者模式

    摘要:你好,是我琉忆,程序员面试笔试系列图书的作者。建造者模式介绍建造者模式又名生成器模式,是一种对象构建模式。表示被构造的复杂对象。创建该产品的内部表示并定义它的装配过程。 你好,是我琉忆,PHP程序员面试笔试系列图书的作者。 本周(2019.3.11至3.15)的一三五更新的文章如下: 周一:PHP面试常考之设计模式——工厂模式周三:PHP面试常考之设计模式——建造者模式周五:PHP面...

    alexnevsky 评论0 收藏0
  • php面向对象设计模式 察者模式

    摘要:最近在学的设计模式,看到了观察者模式,在此写下一点理解问题假如一个小贩,他把产品的价格提升了,不同的消费者会对此产生不同的反应。 最近在学php 的设计模式, 看到了观察者模式,在此写下一点理解: 问题: 假如一个小贩, 他把产品的价格提升了, 不同的消费者会对此产生不同的反应。一般的编程模式无非是获取提升的价格,然后获取所有的消费者,再循环每个消费者, 不同的消费者根据价格涨幅...

    genedna 评论0 收藏0
  • PHP设计模式察者模式

    摘要:观察者模式解决的问题在我们的开发过程中,应该都或多或少的碰到过改动其中一部分代码会引起其他一连串改变的问题,显然想要完全避免这种情况不太可能,但我们也应答尽量减少对其他组件的依赖,而观察者模式就是为了解决这个问题。 观察者模式解决的问题 在我们的开发过程中,应该都或多或少的碰到过改动其中一部分代码会引起其他一连串改变的问题,显然想要完全避免这种情况不太可能,但我们也应答尽量减少对其他组...

    hizengzeng 评论0 收藏0

发表评论

0条评论

neu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<