Статья
Шаблон проектирования "Адаптер"

Шаблон проектирования "Адаптер"

17 ноября 2017

Пусть имеется интерфейс Cat и 2 класса кошек - британская кошка BritishShorthairCat и персидская кошка PersianCat, реализующие интерфейс Cat:

interface Cat
{
    public function meow();
}

class BritishShorthairCat implements Cat
{
    public function meow()
    {
        ...
    }
}

class PersianCat implements Cat
{
    public function meow()
    {
        ...
    }
}

 

Создадим новый класс - дикая кошка WildCat, у которой отсутствует метод meow, но присутствует метод snort:

class WildCat
{
    public function snort()
    {
        ...
    }
}

 

Создадим "адаптер" между дикой кошкой (не реализующей интерфейс Cat) и всеми кошками, реализующими интерфейс Cat:

class WildCatAdapter implements Cat
{
    protected $cat;

    public function __construct(WildCat $cat)
    {
        $this->cat = $cat;
    }

    public function meow()
    {
        $this->cat->snort();
    }
}

$wildCat = new WildCat();
$wildCatAdapter = new WildCatAdapter($wildCat); // Реализует интерфейс Cat

$britishCat = new BritishShorthairCat();
$persianCat = new PersianCat();



Источники:

http://designpatternsphp.readthedocs.io/ru/latest/Structural/Adapter/README.html
https://habrahabr.ru/company/mailru/blog/325492/