大話設計模式 命令模式

2021-06-07 23:40:21 字數 2075 閱讀 4654

引自原書:

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.定義 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 ...