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