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

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

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

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

  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. Алексей

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


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map