• PHP设计模式系列


    • 观察者模式

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

    • 场景设计
    1. 设计一个订单类
    2. 订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。
    3. 原始的方法,是将这些操作都写在create函数里面
    4. 但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
    5. 这个时候,观察者模式出现了。
    • 代码设计:
    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著

  • 相关阅读:
    FFmpegTool 这个是很早以前写得ffmpeg c99部分转C89工具代码
    mmsplayer V2 for IOS 完成. V2 所有汇总
    关于mmsplayer一些电台不支持播放问题说明
    libmpg123 解码库用法
    [置顶] mmsplayer V2 for IOS 完成. V2 所有汇总
    使用lipo合并iPhone模拟器和真机的静态类库
    vbs编程
    Adobe reader查阅PDF文件无法显示中文
    常去的下载网站
    .Net程序设计快速入门——分页设计篇
  • 原文地址:https://www.cnblogs.com/wanghaitao/p/9440344.html
Copyright © 2020-2023  润新知