#MOC
[[🗃️継承]]を使わずに、[[🗃️オブジェクト]]のバリエーションを得るための[[🗃️デザインパターン]]。
## 例
各交通手段と通勤者の関係を表現する。
```mermaid
classDiagram
TransportStrategyInterface <|.. BicycleStrategy
TransportStrategyInterface <|.. CarStrategy
TransportStrategyInterface <|.. PublicTransportStrategy
Commuter o-- TransportStrategyInterface
class TransportStrategyInterface{
<<Interface>>
+goTo()
}
class BicycleStrategy{
+goTo()
}
class CarStrategy{
+goTo()
}
class PublicTransportStrategy{
+goTo()
}
class Commuter{
-transportStrategy
+commute()
}
```
交通手段をconstructorで受け取って、移動する。
```php
class Commuter
{
private $transportStrategy;
public function __construct(TransportStrategy $transportStrategy)
{
$this->transportStrategy = $transportStrategy;
}
public function commute(string $destination): void
{
$this->transportStrategy->goTo($destination);
}
}
// Client code
$commuter = new Commuter(new BicycleStrategy());
$commuter->commute('Work'); // Output: Going to Work by bicycle.
$commuter = new Commuter(new CarStrategy());
$commuter->commute('Supermarket'); // Output: Going to Supermarket by car.
$commuter = new Commuter(new PublicTransportStrategy());
$commuter->commute('Airport'); // Output: Going to Airport by public transport.
```
## 📚ドキュメント
- [10. Strategy パターン | TECHSCORE(テックスコア)](https://www.techscore.com/tech/DesignPattern/Strategy)
## 📖ノウハウ
## 💁トラブルシューティング