PHP设计模式系列

来源:互联网 发布:汽车资源软件下载 编辑:程序博客网 时间:2024/05/23 15:44
  • 观察者模式

观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。

  • 场景设计
  1. 设计一个订单类
  2. 订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。
  3. 原始的方法,是将这些操作都写在create函数里面
  4. 但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
  5. 这个时候,观察者模式出现了。
  • 代码设计:
[php] view plain copy
 print?
  1. <?php  
  2. //观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。  
  3. //观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。  
  4. //以一个购物流程为例子  
  5. class order {  
  6.   
  7.     protected $observers = array(); // 存放观察容器  
  8.       
  9.     //观察者新增  
  10.     public function addObServer($type$observer) {  
  11.         $this->observers[$type][] = $observer;  
  12.     }  
  13.       
  14.     //运行观察者  
  15.     public function obServer($type) {  
  16.         if (isset($this->observers[$type])) {  
  17.             foreach ($this->observers[$typeas $obser) {  
  18.                 $a = new $obser;  
  19.                 $a->update($this); //公用方法  
  20.             }  
  21.         }  
  22.     }  
  23.       
  24.     //下单购买流程  
  25.     public function create() {  
  26.         echo '购买成功';  
  27.         $this->obServer('buy'); // buy动作  
  28.     }  
  29. }  
  30. class orderEmail {  
  31.     public static function update($order) {  
  32.         echo '发送购买成功一个邮件';  
  33.     }  
  34. }  
  35. class orderStatus {  
  36.     public static function update($order) {  
  37.         echo '改变订单状态';  
  38.     }  
  39. }  
  40. $ob = new order;  
  41. $ob->addObServer('buy''orderEmail');  
  42. $ob->addObServer('buy''orderStatus');  
  43. $ob->create();  


 

参考:《PHP设计模式》Aaron Saray著

原创粉丝点击