引自原書:
1.較容易地設計乙個命令佇列
2.在需要的情況下,可以容易地將命令記入日誌
3.允許接收請求的一方決定是否要否決請求
4.可以容易地實現對請求的撤銷和重做
5.由於加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易
6.命令模式把請求乙個操作物件與知道怎麼執行乙個操作物件分割開【dp】
敏捷開發原則告訴我們,不要為**新增基於猜測的、實際不需要的功能。如果不清楚乙個系統是否需要命令模式,一般就不要著急去實現它,事實上,在需要的時候通過重構實現這個模式並不困難,只有在真正需要如撤銷/恢復操作等功能時,把原來的代買重構為命令模式才有意義。【r2p】
//抽象命令
abstract class command
//執行命令
abstract public function excutecommand();
}//具體命令類
//烤羊肉串命令
class bakemuttoncommand extends command
public function excutecommand()
}//烤雞翅命令
class bakechickenwingcommand extends command
public function excutecommand()
}//烤肉串者
class barbecuer
//烤雞翅
public function bakechickenwing()
}//服務員
class waiter else if($command instanceof bakemuttoncommand)
} //取消訂單
public function cancelorder(command $command)
//通知全部執行
public function notify() }}
//開店前的準備
$boy = new barbecuer();
$bakemuttoncommand1 = new bakemuttoncommand($boy);
$bakemuttoncommand2 = new bakemuttoncommand($boy);
$bakechickenwingcommand1 = new bakechickenwingcommand($boy);
$girl = new waiter();
//開門營業 顧客點菜
$girl->setorder($bakemuttoncommand1);
$girl->setorder($bakemuttoncommand2);
$girl->setorder($bakechickenwingcommand1);
//點菜完畢,通知廚房
//command類,用來宣告執行操作的介面
abstract class command
abstract public function execute();
}class concretecommand extends command
public function execute()
}//invoker類,要求該命令執行這個請求。
class invoker
public function executecommand()
}//receiver類,知道如何實施與執行乙個與請求相關的操作,任何類都可能作為乙個接收者
class receiver
}$r = new receiver();
$c = new concretecommand($r);
$i = new invoker();
$i->setcommand($c);
$i->executecommand();
大話設計模式 命令模式
description 命令的接收執行者 date 2019 5 21 10 26 public class receiver classname command author leo description 抽象命令類 date 2019 5 21 10 26 public abstract cl...
大話設計模式 命令模式
一 命令模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷的操作。二 示例 public class barbecue public void bakechickenwing public abstract class command a...
大話設計 命令模式
每個模式都在傳遞著一種與眾不同的程式設計理念。每次都彷彿是站在巨人的上,一步步的學習,積土成山。最近學習了命令模式,喜歡它很簡單 開篇從小菜大鳥吃肉串談起,慢慢的吸引著我的注意力,因為感興趣,所以有了進一步的研究。命令模式 1.定義 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 ...