设计模式心得:三——命令模式
繼續設計模式心得體驗——命令模式。
命令模式:?將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。
一般在命令模式中有三個元素,invoker、command、receive。command?是一個抽象類或者也可以是個接口,它封裝了一個execute方法,一般在command初始化的時候接受一個receive參數,而execute就是執行該receive的某些方法。invoker是請求者,它自身可以存儲一個或者一組command的子類,然后在某種情況下按順序執行這些command的execute方法。當然你也就可以記錄下這些命令,或者撤銷。invoker就不需要知道receive怎么做的它只需要知道command有execute方法就行了,不管它是怎么做的,這樣就和receive解耦了。
在生活中的命令模式很多,比如你去餐館吃飯,服務員給你拿了菜單,你寫下幾個菜,服務員將你點的菜記下來,然后交給廚師去做,在這其中,服務員就扮演invoker的角色,他不需要知道廚師怎么燒菜的,他只要將訂單(command組)交給廚師就好。
命令模式一般被用來解決類似隊列,記錄日志,有撤銷操作等類型的問題,invoker是這個核心,它能保證命令的有序執行并且可以記錄下他們或者撤銷操作,而不需要管這些命令是什么,只要是繼承了command命令就行。
從這個模式中我學到了,封裝的好處和抽象(或者說接口),用抽象或者接口定義的execute保證了invoker每次調用command的子類時execute都不會出錯,所以invoker可以保證隊列,日志的正常運行或撤銷,而封裝好了的execute方法讓invoker與具體實現解耦,不用管到底它是怎么實現的。
下面貼下該模式的代碼:
?
代碼 <?php//抽象命令類
abstract class Command {
protected $_r;
public function __construct(Receiver $r)
{
$this->_r = $r;
}
abstract public function execute();
}
//接受命令者(真正的執行者)
class Receiver {
private $_name;
//這里初始化不同的接受者
function __construct($name)
{
$this->_name = $name;
}
function kaoyrc()
{
echo $this->_name . '在烤羊肉串<br />';
}
function kaojc()
{
echo $this->_name . '在烤雞翅<br />';
}
}
class Invoker {
private $_commands = array();
function setCommand(Command $cmd)
{
$this->_commands[] = $cmd;
}
function execute()
{
foreach ($this->_commands as $cmd)
{
$cmd->execute();
}
}
}
//這個是烤羊肉串的命令
class kaoyrcCommand extends Command {
public function execute()
{
$this->_r->kaoyrc();
}
}
//這個是考雞翅的命令
class kaojcCommand extends Command {
public function execute()
{
$this->_r->kaojc();
}
}
$zs = new Receiver('張三'); //初始化接受者張三
$ls = new Receiver('李四'); //初始化接受者李四
$waiter = new Invoker(); //創建服務員
$zskaoyrc = new kaoyrcCommand($zs); //創建讓張三烤羊肉串的命令
$zskaojc = new kaojcCommand($zs); //創建讓張三烤雞翅的命令
$lskaojc = new kaojcCommand($ls); //創建讓李四烤雞翅的命令
//將命令報給服務員讓他處理
$waiter->setCommand($zskaoyrc);
$waiter->setCommand($zskaojc);
$waiter->setCommand($lskaojc);
$waiter->execute(); //將命令組報給接受者(解決者)
?>
// 結果
// 張三在烤羊肉串
// 張三在烤雞翅
// 李四在烤雞翅
?
轉載于:https://www.cnblogs.com/cl51287/archive/2010/10/14/1851703.html
總結
以上是生活随笔為你收集整理的设计模式心得:三——命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ad从2003升级到2008总结
- 下一篇: 梦到好多蟾蜍是什么意思