#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)
## πγγ¦γγ¦
## πγγ©γγ«γ·γ₯γΌγγ£γ³γ°