-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStatePattern.php
More file actions
67 lines (54 loc) · 1.27 KB
/
Copy pathStatePattern.php
File metadata and controls
67 lines (54 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
$player = new MediaPlayer(new RepeatAllState());
$player->nextSong();
$player->transitionTo(new ShuffleState());
$player->nextSong();
$player->transitionTo(new RepeatOneState());
$player->nextSong();
class MediaPlayer
{
private PlayerState $state;
public function __construct(PlayerState $initialState)
{
$this->transitionTo($initialState);
}
public function transitionTo(PlayerState $state)
{
$this->state = $state;
$state->setContext($this);
}
public function nextSong()
{
$this->state->nextSong();
}
}
abstract class PlayerState
{
protected MediaPlayer $mediaplayer;
public function setContext(MediaPlayer $mediaplayer)
{
$this->mediaplayer = $mediaplayer;
}
public abstract function nextSong();
}
class RepeatAllState extends PlayerState
{
public function nextSong()
{
echo "Next song will be the next in the list, or the first one if at the end of the list\n";
}
}
class ShuffleState extends PlayerState
{
public function nextSong()
{
echo "Next song will be a random one\n";
}
}
class RepeatOneState extends PlayerState
{
public function nextSong()
{
echo "Next song will be the same as the current one\n";
}
}