#MOC さまざまな要求を送ろうとすると、引数の数や種類を増やさなければならない。 そこで、要求自体を[[🗃️オブジェクト]]にして、その[[🗃️オブジェクト]]を引数に渡すようにする[[🗃️デザインパターン]] ## 例 - レストランのオーダー - Waiterクラス(Invoker)はOrder(Command)を受け取り、そのOrderをChef(Receiver)に送る ```mermaid classDiagram Order <|.. DishOrder Waiter o-- Order DishOrder o-- Chef class Order{ <<Interface>> +execute() } class DishOrder{ -chef -dish +execute() } class Waiter{ -order +takeOrder(Order) +sendToKitchen() } class Chef{ +cook(string) } ``` ```php interface Order { public function execute(): void; } class Chef { public function cook(string $dish): void { echo "Cooking: " . $dish . "\n"; } } class DishOrder implements Order { private $chef; private $dish; public function __construct(Chef $chef, string $dish) { $this->chef = $chef; $this->dish = $dish; } public function execute(): void { $this->chef->cook($this->dish); } } class Waiter { private $order; public function takeOrder(Order $order): void { $this->order = $order; } public function sendToKitchen(): void { $this->order->execute(); } } // Client code $chef = new Chef(); $waiter = new Waiter(); $waiter->takeOrder(new DishOrder($chef, 'Pasta')); $waiter->sendToKitchen(); // Output: Cooking: Pasta $waiter->takeOrder(new DishOrder($chef, 'Pizza')); $waiter->sendToKitchen(); // Output: Cooking: Pizza ``` ## 📚ドキュメント - [22.Commandパターン | TECHSCORE(テックスコア)](https://www.techscore.com/tech/DesignPattern/Command) ## 📖ノウハウ ## 💁トラブルシューティング