程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP設計模式系列 - 觀察者模式

PHP設計模式系列 - 觀察者模式

編輯:關於PHP編程

觀察者模式
觀察者設計模式能夠更便利創建和查看目標對象狀態的對象,並且提供和核心對象非耦合的置頂功能性。觀察者設計模式非常常用,在一般復雜的WEB系統中,觀察者模式可以幫你減輕代碼設計的壓力,降低代碼耦合。
場景設計
設計一個訂單類
訂單創建完成後,會做各種動作,比如發送EMAIL,或者改變訂單狀態等等。
原始的方法,是將這些操作都寫在create函數裡面
但是隨著訂單創建類的越來越龐大,這樣的操作已經無法滿足需求和快速變動
這個時候,觀察者模式出現了。
代碼設計:
[php] 
<?php 
//觀察者設計模式能夠更便利創建和查看目標對象狀態的對象,並且提供和核心對象非耦合的置頂功能性。 
//觀察者設計模式非常常用,在一般復雜的WEB系統中,觀察者模式可以幫你減輕代碼設計的壓力,降低代碼耦合。 
//以一個購物流程為例子 
class order { 
 
    protected $observers = array(); // 存放觀察容器 
     
    //觀察者新增 
    public function addObServer($type, $observer) { 
        $this->observers[$type][] = $observer; 
    } 
     
    //運行觀察者 
    public function obServer($type) { 
        if (isset($this->observers[$type])) { 
            foreach ($this->observers[$type] as $obser) { 
                $a = new $obser; 
                $a->update($this); //公用方法 
            } 
        } 
    } 
     
    //下單購買流程 
    public function create() { 
        echo '購買成功'; 
        $this->obServer('buy'); // buy動作 
    } 

class orderEmail { 
    public static function update($order) { 
        echo '發送購買成功一個郵件'; 
    } 

class orderStatus { 
    public static function update($order) { 
        echo '改變訂單狀態'; 
    } 

$ob = new order; 
$ob->addObServer('buy', 'orderEmail'); 
$ob->addObServer('buy', 'orderStatus'); 
$ob->create(); 
作者:initphp

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved