溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP中的命令模式介紹

發(fā)布時(shí)間:2021-07-23 10:19:19 來源:億速云 閱讀:140 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“PHP中的命令模式介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

命令模式(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存儲(chǔ)用戶行為鏈,以支持撤銷和重做操作。

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

PHP中的命令模式介紹

在這個(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對(duì)象實(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è)非常簡(jiǎn)單的只有一個(gè)方法的策略(Strategy),重點(diǎn)放在對(duì)象的操作上;
◆ConcreteCommands也要組織它們需要的每一個(gè)資源,以實(shí)現(xiàn)它們的目標(biāo),主要是行為的Receiver(接受者),它們調(diào)用方法執(zhí)行一個(gè)Command;
◆復(fù)合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的Command,裝飾Command等等。

“PHP中的命令模式介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI