Я пытаюсь изучить шаблоны проектирования GoF. Пока я понимаю синглтон, фасад и стратегию. Но я застрял / запутался с шаблоном адаптера. Вот как я пытался реализовать шаблон в PHP:
[Резюме: Rhythmbox - музыкальный проигрыватель, VLC - видеоплеер. Но я хочу играть музыку в VLC]
interface Listenable {
public function playMusic();
}
interface Watchable {
public function watchVideo();
}
class Music implements Listenable {
public function playMusic() {
echo 'Playing a music';
}
}
class Video implements Watchable {
public function watchVideo() {
echo 'Playing a video';
}
}
class Rhythmbox {
public function play($music) {
$music->playMusic();
}
}
class VLC {
public function watch($video) {
$video->watchVideo();
}
}
class VLCAdapter implements Watchable {
public $music;
public function __construct($music) {
$this->music = $music;
}
public function watchVideo() {
$this->music->playMusic();
}
}
(new VLCAdapter(new Music))->watchVideo(); # Why this?
(new Rhythmbox)->play(new Music); # Why not this?
Но я думаю, что не реализовал это должным образом. Либо это, либо я не могу понять его значение. Когда я закончил писать адаптер, со мной что-то пришло в голову: почему кто-то не использовал бы Rhythmbox
напрямую для воспроизведения Music
и вместо этого использовал VLCAdapter
? В какой момент или при каких обстоятельствах следует выбрать VLCAdapter
?
Может кто-нибудь объяснить, как можно извлечь из этого выгоду? Или что я не понимаю?