PHP设计模式-观察者

PHP设计模式-观察者

一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。一个对象通过添加一个attach方法允许观察者注册自己,使本身变得可观察。当被观察的对象更改时,它会将消息发送到已注册的观察者。观察者使用该信息执行的操作与被观察的对象无关。观察者模式是一种事件系统,意味着这一模式允许某些类通过观察被观察类的状态变化,做出相应的动作。

观察者模式UML图

php5中提供了观察者observer与被观察者subject接口

interface SplSubject

{

function attach(SplObserver $observer);

function detach(SplObserver $observer);

function notify();

}

interface SqlObserver

{

function update(SplSubject $subject);

}

例子如下

<?php
  class user implements SplSubject{
  public     $lognum;
  public     $hobby;
  protected  $observers;
  
  public function __construct($hobby){
      $this->lognum= rand(1,10);
      $this->hobby= $hobby;
      $this->observers=new SplObjectStorage();
  }
  public function login(){
    $this->notify();
  }
  
  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();
      }      
  }    
  }
   
  class secrity implements SPLObserver{
      
      public function update(SplSubject $subject){
          if($subject->lognum>=3){
              
          }else{
              
          }          
      }
  }
    
  class ad implements SPLObserver{
  
      public function update(SplSubject $subject){
          if($subject->hobby=="sports"){
  
          }else{
  
          }  
      }
  }
  
  //实施观察
  $user= new user("sports");
  $user->attach(new secrity());
  $user->attach(new ad());
  $user->login();
  
  ?>
时间: 2024-10-02 20:13:26

PHP设计模式-观察者的相关文章

iOS常用设计模式——观察者设计模式

观察者设计模式详解 观察者设计模式详解 基本概念 NSNotificationCenter的使用 添加监听 接收消息 删除监视 KVO的使用 基本概念 注册观察者 观察者对象发生变化时的回调方法 remove观察者身份 代码实现 基本概念 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.而在IOS开发中我们可能会接触到的经典观察者模式的实现方式,有这么几种:NSNotificationCen

JAVA设计模式——观察者设计模式和Reactor反应堆设计模式

被观察者(主题)接口 定义主题对象接口 /**抽象主题角色: 这个主题对象在状态上发生变化时,会通知所有观察者对象 也叫事件对象 */ public interface Subject { //增加一个观察者 public void addWatcher(Watcher watcher); //删除一个观察者 public void removeWatcher(Watcher watcher); //通知所有的观察者 public void notifyWatchers(String str);

设计模式——观察者

观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有的依赖者都会收到通知并自动更新: 定义主题,主题的功能是持有观察者的引用,提供注册.取消注册和通知,并且有状态:观察者实现接口中的update方法,必须注册具体主题: JDK自带了对观察者的支持功能 被观察者Observable对象,提供add/delete/notifyObserver()和setChanged()设置状态方法 观察者Observer接口,提供update()方法进行相关的更新操作. 观察者类图: 以下程序模拟

设计模式-观察者

定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. UML图示: 代码示例:就拿之前做过的项目举例,博主要实现餐厅打印订单的功能,如下图示. 通过上图很明显我们发现订单中心与打印机存在一对多的关系,根据上面对于观察者定义,采用观察者模式,可以让订单中心的状态改变的同时,让所有打印机都接收到状态的改变.下面我们再来看一张UML图. 定义Subject接口 public interface Subject { ? ????public void

Android与设计模式——观察者(Observer)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式的结构 一个软件系统里面包含了

设计模式--观察者(Observer)

GOF给出的定义: Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 定义了对象之间的一种一对多的依赖关系,这样,当一个对象的状态发生变化时,所有的依赖对象都被通知并自动更新. 包含观察者与被观察者(也称为主题) 使用场景: 1.有两个抽象类型相互依赖.将他

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

定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新. Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步. java提供Obeservable类和Observer接口. 比如购房,购房者是观察者,而房价是被观察者,房价的变化是被观察者所关注的. /** * 被观察者 * @author soyoungboy * */ public class House extends Observable {

设计模式观察者

观测者模式 设计原则:遵循迪米特.开闭原则常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定使用概率:40%复杂度:中变化点:观察者的种类与个数选择关键点:观察者与被观察者是否是多对一的关系逆鳞:观察者之间有过多的细节依赖 主要思想:其实比较简单,是发布-订阅形式的,就是类之间的关系,观察者与被观察者被观察者的属性变化了,那观察者就要随着改变,不过不是观察者一直监视着,而是被观察者主动通知现有的使用比较多,常见的比如nsq消息框架,我变动了就发一个消息,需要知道我变动的定义我发的top

python设计模式-观察者

定义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖的对象都会得到通知并被自动更新. 观察者模式是对象的行为模式,又叫发布-订阅(pubish/subscribe)模式,模型-视图(Model/View模式),源-监听器(Source/Listener)模式或从属者(Dependents)模式. 角色: 抽象主题,具体主题(发布者), 抽象观察者,具体观察者(订阅者) 适用场景: 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面.将两者封装在独立的对象中以使它们各