#MOC ηŠΆζ…‹γ«γ‚ˆγ£γ¦γ΅γ‚‹γΎγ„γŒε€‰γ‚γ‚‹γ‚ˆγ†γͺε€‰εŒ–γ‚’ζ‰±γ†[[πŸ—ƒοΈγƒ‡γ‚Άγ‚€γƒ³γƒ‘γ‚ΏγƒΌγƒ³]] ## δΎ‹ Music Player ```mermaid classDiagram State <|.. PlayingState State <|.. StoppedState MusicPlayer o-- State class State{ <<Abstract>> +clickPlay() +clickStop() } class PlayingState{ -player +clickPlay() +clickStop() } class StoppedState{ -player +clickPlay() +clickStop() } class MusicPlayer{ -state +clickPlay() +clickStop() +setState(State) } ``` ```php interface State { public function clickPlay(); public function clickStop(); } class PlayingState implements State { private $player; public function __construct(MusicPlayer $player) { $this->player = $player; } public function clickPlay() { echo "Already playing music.\n"; } public function clickStop() { echo "Stopping music.\n"; $this->player->setState(new StoppedState($this->player)); } } class StoppedState implements State { private $player; public function __construct(MusicPlayer $player) { $this->player = $player; } public function clickPlay() { echo "Starting to play music.\n"; $this->player->setState(new PlayingState($this->player)); } public function clickStop() { echo "Already stopped.\n"; } } class MusicPlayer { private $state; public function __construct() { $this->state = new StoppedState($this); } public function clickPlay() { $this->state->clickPlay(); } public function clickStop() { $this->state->clickStop(); } public function setState(State $state) { $this->state = $state; } } // Client code $player = new MusicPlayer(); $player->clickPlay(); // Output: Starting to play music. $player->clickPlay(); // Output: Already playing music. $player->clickStop(); // Output: Stopping music. $player->clickStop(); // Output: Already stopped. ``` ## πŸ“šγƒ‰γ‚­γƒ₯γƒ‘γƒ³γƒˆ - [19.State パターン | TECHSCORE(テックスコを)](https://www.techscore.com/tech/DesignPattern/State) ## πŸ“–γƒŽγ‚¦γƒγ‚¦ ## πŸ’γƒˆγƒ©γƒ–γƒ«γ‚·γƒ₯ーティング