最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP設(shè)計(jì)模式之命令模式的深入解析

 更新時(shí)間:2013年06月13日 15:35:24   作者:  
本篇文章是對PHP設(shè)計(jì)模式中的命令模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

命令模式(Command),命令模式是封裝一個(gè)通用操作的機(jī)制。

如果你熟悉C或PHP,你可能已經(jīng)遇到過Command,它相當(dāng)于程序中的:回調(diào)(callback)?;卣{(diào)通常使用一個(gè)函數(shù)指針或數(shù)據(jù)結(jié)構(gòu)如PHP中的字符串和數(shù)組實(shí)現(xiàn),Command是在一個(gè)方法調(diào)用之上的抽象,它吸收了所有面向?qū)ο蟮暮锰帲汉铣?、繼承和處理。

例如,《設(shè)計(jì)模式》一書推薦使用Command存儲用戶行為鏈,以支持撤銷和重做操作。

注意PHP 5.3函數(shù)編程能力(閉包)可以被當(dāng)做Command模式的一個(gè)本地實(shí)現(xiàn),但為每一個(gè)命令層次結(jié)構(gòu)使用抽象數(shù)據(jù)類型有助于類型安全。



在這個(gè)模式中,Invoker(調(diào)用者)知道傳遞給它的Command,無需依賴于真實(shí)的ConcreteCommand(具體的命令)實(shí)現(xiàn),解決了通過配置進(jìn)行方法調(diào)用相關(guān)的問題,如UI控件按鈕和菜單等引用一個(gè)Command,它們的行為是通過通用的ConcreteCommand實(shí)例呈現(xiàn)的。
參與者:
◆Command(命令):在一個(gè)方法調(diào)用之上定義一個(gè)抽象;
◆ConcreteCommand(具體的命令):一個(gè)操作的實(shí)現(xiàn);
◆Invoker(調(diào)用者):引用Command實(shí)例作為它可用的操作。
下面的代碼展示了Validator組件作為Command對象實(shí)現(xiàn)的示例:
復(fù)制代碼 代碼如下:

/** 
 * The Command abstraction. 
 * In this case the implementation must return a result, 
 * sometimes it only has side effects. 
 */
interface Validator 

    /** 
     * The method could have any parameters. 
     * @param mixed 
     * @return boolean 
     */
    public function isValid($value); 


/** 
 * ConcreteCommand. 
 */
class MoreThanZeroValidator implements Validator 

    public function isValid($value) 
    { 
        return $value > 0; 
    } 


/** 
 * ConcreteCommand. 
 */
class EvenValidator implements Validator 

    public function isValid($value) 
    { 
        return $value % 2 == 0; 
    } 


/** 
 * The Invoker. An implementation could store more than one 
 * Validator if needed. 
 */
class ArrayProcessor 

    protected $_rule; 

    public function __construct (Validator $rule) 
    { 
        $this->_rule = $rule; 
    } 

    public function process(array $numbers) 
    { 
        foreach ($numbers as $n) { 
            if ($this->_rule->IsValid($n)) { 
                echo $n, "\n"; 
            } 
        } 
    } 


// Client code 
$processor = new ArrayProcessor(new EvenValidator()); 
$processor->process(array(1, 20, 18, 5, 0, 31, 42));

使用PHP設(shè)計(jì)模式中的命令模式的一些注意事項(xiàng):
◆方法調(diào)用中的某些參數(shù)可以在構(gòu)造ConcreteCommand時(shí)提供,有效地局部套用(currying)原始函數(shù);
◆一個(gè)Command可以被看作是一個(gè)非常簡單的只有一個(gè)方法的策略(Strategy),重點(diǎn)放在對象的操作上;
◆ConcreteCommands也要組織它們需要的每一個(gè)資源,以實(shí)現(xiàn)它們的目標(biāo),主要是行為的Receiver(接受者),它們調(diào)用方法執(zhí)行一個(gè)Command;
◆復(fù)合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的Command,裝飾Command等等。

相關(guān)文章

  • PHP將回調(diào)函數(shù)作用到給定數(shù)組單元的方法

    PHP將回調(diào)函數(shù)作用到給定數(shù)組單元的方法

    這篇文章主要介紹了PHP將回調(diào)函數(shù)作用到給定數(shù)組單元的方法,是十分重要的一種應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • 一道關(guān)于php變量引用的面試題

    一道關(guān)于php變量引用的面試題

    當(dāng)一個(gè)變量等于另一個(gè)變量的引用的時(shí)候,這時(shí)任何一方改變了其值,另一方看到的這個(gè)值也會變化的。前加本次就表現(xiàn)出來,而后加下一次才會表現(xiàn)出來。
    2010-08-08
  • PHP正則匹配操作簡單示例【preg_match_all應(yīng)用】

    PHP正則匹配操作簡單示例【preg_match_all應(yīng)用】

    這篇文章主要介紹了PHP正則匹配操作,結(jié)合簡單實(shí)例形式分析了php中preg_match_all針對HTML標(biāo)簽中P元素及img src元素內(nèi)容的獲取技巧,需要的朋友可以參考下
    2017-07-07
  • php中try catch捕獲異常實(shí)例詳解

    php中try catch捕獲異常實(shí)例詳解

    這篇文章主要介紹了php中try catch捕獲異常的用法,以實(shí)例形式詳細(xì)分析了捕獲一個(gè)異常與捕獲多個(gè)異常的方法,有助于更好的處理一些不必要的錯誤,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-11-11
  • PHP數(shù)據(jù)過濾的方法

    PHP數(shù)據(jù)過濾的方法

    關(guān)于如何確保數(shù)據(jù)過濾無法被繞過有各種各樣的觀點(diǎn),今天我們就來看看PHP的數(shù)據(jù)過濾,對你一定會有幫助的。
    2013-10-10
  • PHP 數(shù)組操作詳解【遍歷、指針、函數(shù)等】

    PHP 數(shù)組操作詳解【遍歷、指針、函數(shù)等】

    這篇文章主要介紹了PHP 數(shù)組操作,結(jié)合實(shí)例形式詳細(xì)分析了PHP數(shù)組遍歷、指針、數(shù)組常用函數(shù)等相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • php preg_replace替換實(shí)例講解

    php preg_replace替換實(shí)例講解

    php preg_replace()替換實(shí)例講解,php preg_replace()是執(zhí)行一個(gè)正則表達(dá)式的搜索和替換的用函數(shù).
    2013-11-11
  • PHP安裝BCMath擴(kuò)展的方法

    PHP安裝BCMath擴(kuò)展的方法

    今天小編就為大家分享一篇關(guān)于PHP安裝BCMath擴(kuò)展的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • php檢查是否是ajax請求的方法

    php檢查是否是ajax請求的方法

    這篇文章主要介紹了php檢查是否是ajax請求的方法,涉及預(yù)定義服務(wù)器變量的使用技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-04-04
  • PHP 調(diào)試工具Debug Tools

    PHP 調(diào)試工具Debug Tools

    發(fā)現(xiàn)了個(gè)調(diào)試PHP源碼的好同志: PHP DEBUG TOOLS,需要的朋友可以參考下。
    2011-04-04

最新評論

城口县| 政和县| 西林县| 丹寨县| 昭苏县| 达日县| 龙岩市| 南汇区| 乐安县| 娱乐| 厦门市| 逊克县| 金秀| 根河市| 九江市| 平安县| 小金县| 嵊州市| 镇安县| 景洪市| 福泉市| 留坝县| 龙江县| 阿图什市| 垫江县| 吉安市| 锡林浩特市| 高清| 增城市| 西贡区| 甘肃省| 东城区| 绥德县| 澄江县| 衡南县| 班玛县| 商水县| 杭锦后旗| 南皮县| 兴业县| 遵义县|