#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)
## 📖ノウハウ
## 💁トラブルシューティング