怎么在PHP中使用观察者模式

  介绍

这期内容当中小编将会给大家带来有关怎么在PHP中使用观察者模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

观察者模式当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新

<>强场景:当一个事件发生后,要执行一连串更新操作,传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新逻辑增多之后,代码变得难以维护,这种方式是耦合式的,侵入式的,增加新的逻辑需要改变事件主题的代码

观察者模式实现了低耦合,非侵入式的通知与更新

abstract  class  EventGenerator   {   private 才能;ObServers 美元;=,[];//才能增加观察者   public 才能;function 添加(ObServer 观察者美元)   {才能   ,,,这个→美元观察家[],=,观察者美元;   ,,}//才能事件通知   public 才能;function  notify ()   {才能   ,,,foreach  ($ this→ObServers  as 观察者美元),{   ,,,,,观察者→美元更新();   ,,,}   ,,}   }/* *   ,*观察者接口类   ,* Interface 观察者   ,*/interface 观察者   {   public 才能;function 更新($ event_info =, null);   }/* *   ,*观察者1   ,*/class  ObServer1  implements 观察者   {   public 才能;function 更新($ event_info =, null)   {才能   ,,,echo “观察者1,收到执行通知,执行完毕! \ n";   ,,}   }/* *   ,*观察者1   ,*/class  ObServer2  implements 观察者   {   public 才能;function 更新($ event_info =, null)   {才能   ,,,echo “观察者2,收到执行通知,执行完毕! \ n";   ,,}   }/* *   ,*事件   ,* Class 事件   ,*/class  Event  extends  EventGenerator   {   ,/* *   ,,*,触发事件   ,,*/public 才能;function 触发()   {才能   ,,,//通知观察者   ,,,这美元→通知();   ,,}   }//创建一个事件   $ event =, new 事件();//为事件增加旁观者   美元事件→添加(new  ObServer1 ());   美元事件→添加(new  ObServer2 ());//执行事件,通知旁观者   →美元事件触发();

运行结果:

观察者1收到执行通知执行完毕!
观察者2收到执行通知执行完毕!

1抽象的事件产生类,定义一个添加观察者方法,和通知方法(执行观察者方法)

2定义观察者接口,实现方法,观察者实现

3定义具体实现类继承抽象事件,实现通知方法

4创建对象,增加旁观者,更新

<强>具体注册实例

& lt; php ?/* *   ,* 3.1 php设计模式,观测者模式   ,* 3.1.1概念:其实观察者模式这是一种较为容易去理解的一种模式吧,它是一种事件系统,意味   ,*,,,,着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,   ,*,,,,观察类可以收到通知并且做出相应的动作,观察者模式为您提供了避免组件之间   ,*,,,,紧密耦合的另一种方法   ,* 3.1.2关键点:   ,*,,,1。被观察者→追加观察者;→一处观察者;→满足条件时通知观察者;→观察条件   ,*,,,2。观察者,→接受观察方法   ,* 3.1.3缺点:   ,* 3.1.4观察者模式在PHP中的应用场合:在网络开发中观察者应用的方面很多   ,*,,,典型的:用户注册(验证邮件,用户信息激活),购物网站下单时邮件/短信通知等   ,* 3.1.5php内部的支持   ,*,,,SplSubject 接口,它代表着被观察的对象,   ,*,,,其结构:   ,*,,,interface  SplSubject   ,*,,,{   ,*,,,,,public  function 附加(SplObserver 观察者美元);   ,*,,,,,public  function 分离(SplObserver 观察者美元);   ,*,,,,,public  function 通知();   ,*,,,}   ,*,,,SplObserver 接口,它代表着充当观察者的对象,   ,*,,,其结构:   ,*,,,interface  SplObserver   ,*,,,{   ,*,,,,,public  function 更新(SplSubject 主题美元);   ,*,,,}   ,*//* *   ,*用户登陆-诠释观察者模式   ,*/class  User  implements  SplSubject  {//才能注册观察者   public 才能;observers 美元;=,数组();//动才能作类型   CONST 才能;OBSERVER_TYPE_REGISTER =, 1;//注册   CONST 才能;OBSERVER_TYPE_EDIT =, 2;//编辑   ,/* *   ,,*,追加观察者   ,,*,@param  SplObserver  observer 美元;观察者   ,,*,@param  int  type 美元;观察类型   ,,*/public 才能;function 附加(SplObserver 观察者,美元,美元类型)   {才能   ,,,这个→美元观察家[美元类型][],=,观察者美元;   ,,}   ,/* *   ,,*,去除观察者   ,,*,@param  SplObserver  observer 美元;观察者   ,,*,@param  int  type 美元;观察类型   ,,*/public 才能;function 分离(SplObserver 观察者,美元,美元类型)   {才能   ,,,如果($ idx =,函数(观察者,美元,美元这→观察员(美元类型),,真的))   ,,,{   ,,,,,设置($ this→观察家[$类型][$ idx]);   ,,,}   ,,}   ,/* *   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在PHP中使用观察者模式