• Спонсоры

  • Рубрики

  • Архивы

  • Популярное



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

Основное назначение шаблона проектирования Адаптер понятно из названия – он адаптирует элементы для работы в различных средах. Если говорить более конкретно, то адаптер – это класс-обортка для основного класса, предоставляющий другой способ доступа к нему.

Теперь подробно.

Обычно, этот шаблон используют в одном из трех случаев:

  1. Когда нужно чтобы один класс работал с другими классами, непохожими друг на друга. В этом случае для основного класса создается адаптер для одного из двух других (или для каждого). Ниже подробнее опишу это.
  2. Приспособить один из старых компонентов для работы в текущей системе или просто обновить интерфейс какого-то класса.

Допустим, у нас есть три класса: основной и два других. У основного класса есть два метода getPrice() и getDiscount() – для получения цены и скидки. Остальные два класса обращаются к первому классу, причем первому классу нужны оба метода, а второму, нужно чтобы метод возвращал цену сразу с учетом скидки. В этом случае классы оказываются несовместимыми. И тут на помощь приходит Адаптер.

Чтобы стало все понятно, рассмотрим это на примере.

class Product {

    private $price;

    private $discount;

    function __construct($price, $discount) {

        $this->price = $price;

        $this->discount = $discount;

    }

    function getPrice() {

        return $this->price;

    }

    function getDiscount() {

        return $this->discount;

    }

}

class ProductAdapter {

    private $products;

    function __construct(Product $product) {

        $this->product = $product;

    }

    function getPrice() {

        return $this->product->getPrice() - $this->product->getDiscount();

    }

}

Теперь в тех двух классах обратиться к продукту можно двумя способами:

// Для первого класса
$product1 = new Product(100, 20);
echo 'Discounted price = '.($product1->getPrice() - $product1->getDiscount());

// Для второго класса
$product2 = new ProductAdapter($product1);
echo 'Discounted price = '.$product2->getPrice();

В обоих случаях будет выведено «Discounted price = 80».

Из примера видно, что основное назначение шаблона проектирования Адаптер – это изменение текущего интерфейса доступа к экземпляру класса.

Если делать аналогию с реальным миром, то вспомните блок адаптер от сотового телефона, через который вы подключаете его к розетке для подзарядки.

Удачи 🙂





Читайте также:



4 комментария на “Шаблон проектирования Адаптер.”

  1. Игорь

    Хороший пост. Мне вообще нравится как вы доступно излогаете материал.

  2. cryptus

    Спасибо 🙂

  3. Александр

    А вот я вот не совсем видимо понял для чего нужен данный паттерн. Ведь можно сделать просто расширить класс Product и не плодить дополнительные классы?

  4. Алексей

    Как этот пример связан с паттерном Адаптер? Автор, почитайте литературу, прежде чем вводить в заблуждение других.

Оставить комментарий


© 2008 - 2017 i-novice.net | Все права защищены.