命令模式(command),命令模式是封裝乙個通用操作的機制。
如果你熟悉c或php,你可能已經遇到過command,它相當於程式中的:**(callback)。**通常使用乙個函式指標或資料結構如php中的字串和陣列實現,command是在乙個方法呼叫之上的抽象,它吸收了所有物件導向的好處:合成、繼承和處理。
例如,《設計模式》一書推薦使用command儲存使用者行為鏈,以支援撤銷和重做操作。
注意php 5.3函式程式設計能力(閉包)可以被當做command模式的乙個本地實現,但為每乙個命令層次結構使用抽象資料型別有助於型別安全。
在這個模式中,invoker呼叫者)知道傳遞給它的command,無需依賴於真實的concretecommand(具體的命令)實現,解決了通過配置進行方法呼叫相關的問題,如ui控制項按鈕和選單等引用乙個command,它們的行為是通過通用的concretecommand例項程式設計客棧呈現的。
參與者:
◆command(命令):在乙個方法呼叫之上定義乙個抽象;
◆concretecommand(具體的命令):乙個操作的實現;
◆invoker(呼叫者):引用command例項作為它可用的操作。
下面的**展示了validator元件作為command物件實現的示例:
複製** **如下:
/**
* the command abstraction.
* in this case the implementation must return a result,
* sometimes it only has side effects.
*/ inte***ce validator
/**
* concretecommand.
*/ class morethanzerovalidator implewww.cppcns.comments validator
} /**
* concretecommand.
*/ class evenvalidator implements validator
} /**
* the invoker. an implementation could store more than one
* validator if needed.
*/ class arrayprocessor
public function process(array $numbers)
} }
} // client code
$processor = new arrayprocessor(new evenvalidator());
$processor->process(array(1, 20, 18, 5, 0, 31, 42));
使用php設計模式中的命令模式的一些注意事項:
◆方法呼叫中的某些引數可以在構造concretecommand時提供,有效地區域性套用(currying)原始函式;
◆乙個command可以被看作是乙個非常簡單的只有乙個方法的策略(strategy),重點放在物件的操作上;
◆concretecommands也要組織它們需要的每乙個資源,以實現它們的目標,主要是行為的receiver(接受者),它們呼叫方法執行乙個command;
◆復合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的command,裝飾command等等。
本文標題: php設計模式之命令模式的深入解析
本文位址: /wangluo/php/96549.html
PHP設計模式之命令模式
將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。用於 行為請求者 與 行為實現者 解耦,可實現二者之間的松耦合,以便適應變化。如下 header content type text html charset uft 8 命令模式 inte ce validator 命令介面 ...
PHP設計模式之命令模式
命令模式,也稱為動作或者事務模式,很多教材會用飯館來舉例。作為顧客的我們是命令的下達者,服務員是這個命令的接收者,選單是這個實際的命令,而廚師是這個命令的執行者。那麼,這個模式解決了什麼呢?當你要修改選單的時候,只需要和服務員說就好了,她會轉達給廚師,也就是說,我們實現了顧客和廚師的解耦。也就是呼叫...
設計模式之命令模式 php實現命令模式
命令模式就是把命令封裝成物件。將乙個請求封裝為物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄日誌,以及支援可撤銷的操作。命令模式有哪些好處呢?命令模式把請求乙個操作的物件和直到怎麼執行乙個操作的物件分隔開。比如服務員把操作的請求者客戶和操作的執行者廚師分離開,把客戶的命令傳遞給廚師。...