当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP设计模式(观察者模式)

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-07 09:31:57 浏览: 评论:0 

这篇文章主要介绍了PHP设计模式(观察者模式),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下。

PHP 设计模式之观察者模式

介绍

现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式! 这就向写文章一样,有的人喜欢文章按照套路走,比如叙事性质的文章,时间,地点,人物,事件。而有的人喜欢写杂文或者散文,有的人喜欢写诗词! 现在写代码很多地方类似于写文章,但是在有些地方比写文章需要更多的技能!写文章写多了一般也能写出优秀的文章,而代码也一样,写多了也能写出很多有些的代码! 很多时候,我看设计模式的时候,有些设计模式只是吻合我的代码习惯。但是你硬去套它,那么反而适得其反。——很多时候是学会了招式,在应用中不知不觉的使用上这些招式,才能掌握其道,但是也不要拘泥于招式,正所谓“无招胜有招”吗? 我学设计模式的初衷,就是知道有这么个玩意儿?脑子里有这么个印象,也不会生套它!如果设计模式不符合你的习惯对你阅读代码反而是不利的! 观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新!

设计原则

在观察者模式中,会改变的是主题的状态以及观察者的数目。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题。——找出程序中会变化的方面,然后将其和固定不变的方面相分离! 主题和观察者都使用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点! ——针对接口编程,不针对实现编程! 观察者模式利用“组合”将许多观察者组合进主题中。对象(观察者——主题)之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式产生的。 ——多用组合,少用继承!

代码:

  1. <?php 
  2. /** 
  3.  * 观察者模式 
  4.  * @author: Mac 
  5.  * @date: 2012/02/22 
  6.  */ 
  7. class Paper{ /* 主题    */ 
  8.     private $_observers = array(); 
  9.    
  10.     public function register($sub){ /*  注册观察者 */ 
  11.         $this->_observers[] = $sub
  12.     } 
  13.     public function trigger(){  /*  外部统一访问    */ 
  14.         if(!emptyempty($this->_observers)){ 
  15.             foreach($this->_observers as $observer){ 
  16.                 $observer->update(); 
  17.             } 
  18.         } 
  19.     } 
  20. }  
  21. /** 
  22.  * 观察者要实现的接口 
  23.  */ 
  24. interface Observerable{ 
  25.     public function update(); 
  26. }  
  27. class Subscriber implements Observerable{ 
  28.     public function update(){ 
  29.         echo "Callback\n"
  30.     } 

下面是测试代码:

  1. /*  测试    */ 
  2. $paper = new Paper(); 
  3. $paper->register(new Subscriber()); 
  4. //$paper->register(new Subscriber1()); 
  5. //$paper->register(new Subscriber2()); 
  6. $paper->trigger(); 

总结:

当新对象要填入的时候,只需要在主题(又叫可观察者)中进行注册(注册方式很多,你也可以在构造的时候,或者框架访问的接口中进行注册),然后实现代码直接在新对象的接口中进行。这降低了主题对象和观察者对象的耦合度,好的设计模式不会直接进入你的代码中,而是进入你的大脑中。

Tags: PHP设计模式 PHP观察者模式

分享到: