天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP設計模式之命令模式的深入解析

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

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

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

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



在這個模式中,Invoker(調(diào)用者)知道傳遞給它的Command,無需依賴于真實的ConcreteCommand(具體的命令)實現(xiàn),解決了通過配置進行方法調(diào)用相關(guān)的問題,如UI控件按鈕和菜單等引用一個Command,它們的行為是通過通用的ConcreteCommand實例呈現(xiàn)的。
參與者:
◆Command(命令):在一個方法調(diào)用之上定義一個抽象;
◆ConcreteCommand(具體的命令):一個操作的實現(xiàn);
◆Invoker(調(diào)用者):引用Command實例作為它可用的操作。
下面的代碼展示了Validator組件作為Command對象實現(xiàn)的示例:
復制代碼 代碼如下:
/** 
 * 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設計模式中的命令模式的一些注意事項:
◆方法調(diào)用中的某些參數(shù)可以在構(gòu)造ConcreteCommand時提供,有效地局部套用(currying)原始函數(shù);
◆一個Command可以被看作是一個非常簡單的只有一個方法的策略(Strategy),重點放在對象的操作上;
◆ConcreteCommands也要組織它們需要的每一個資源,以實現(xiàn)它們的目標,主要是行為的Receiver(接受者),它們調(diào)用方法執(zhí)行一個Command;
◆復合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的Command,裝飾Command等等。

php技術(shù)PHP設計模式之命令模式的深入解析,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产亚洲精品久久久久久国模美 | 国内精品蜜汁乔依琳视频 | 性xxxx直播放免费 | 永久免费精品影视网站 | 91福利国产在线观看网站 | 亚洲视频国产在线精品 | 亚洲 欧美 日韩 精品 自拍 | 4480YY旧里番在线播放 | 国产成人久久婷婷精品流白浆 | 好男人社区 | 国产国产成年在线视频区 | 久久网站视频 | gay台湾无套男同志xnxⅹ | 免费乱理伦片在线观看夜 | 亚洲视频在线观看网站 | 麻豆精品无码久久久久久久久 | 啊轻点灬大JI巴又大又粗 | 香蕉久久日日躁夜夜嗓 | 国产一区二区精品视频 | 乡土女性网动态图解 | 日本久久久WWW成人免费毛片丨 | 三级黄色片免费观看 | 能看的黄页最新网站 | 在线观看国产人视频免费中国 | 久爱在线中文在观看 | 91精品免费久久久久久久久 | 香蕉精品国产自在现线拍 | 51精品少妇人妻AV一区二区 | 日本免费无码A专区在线观看 | 亚洲精品久久久久无码AV片软件 | 日本aa大片 | 中文字幕不卡免费高清视频 | 亚洲欧美一区二区久久 | 国色天香视频在线社区 | 伊人久久大香线蕉影院95 | 97在线观看成人免费视频 | 青青精品国产自在线拍 | 91次元黄色观看 | 欧美深深色噜噜狠狠yyy | 日本漫画母亲口工子全彩 | 偷窥国产亚洲免费视频 |