Реализация и понимание шаблона адаптера в PHP - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь изучить шаблоны проектирования 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?

Может кто-нибудь объяснить, как можно извлечь из этого выгоду? Или что я не понимаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...