Evgenii Legotckoi
Evgenii Legotckoi21 вересня 2018 р. 17:11

Структурні шаблони проектування - Адаптер

Голи

  1. Перетворення інтерфейсу класу на інший інтерфейс. Адаптер дозволяє класам працювати разом, що інакше могло бути пов'язане з несумісними інтерфейсами класів.
  2. Обертання існуючого класу на новий інтерфейс
  3. Відповідність старого компонента новій системі

Проблеми

Вже готовий компонент має все необхідне розробки вашої системи, але його інтерфейси несумісні з інтерфейсами класів вашого докладання.


Обговорення

Повторне використання завжди було болючим. Однією з причин була проблема створення чогось нового, при повторному використанні чогось старого. Між старим та новим завжди є щось не зовсім правильне чи не зовсім сумісне. Це може бути фізичні розміри. Це може бути синхронізація. Це можуть бути невдалі припущення чи конкуруючі стандарти.

Це схоже на проблему вставки нового триштирькового електричного штепселя в стару двоштиркову розетку - необхідний адаптер або посередник.

Адаптер - це створення проміжної абстракції, яка переводить чи зіставляє старий компонент у нову систему. Клієнти викликають методи об'єкта Adapter, які перенаправляють їх у виклики успадкованого компонента. Ця стратегія може бути реалізована або з наслідуванням, або з агрегацією.

Адаптер функціонує як оболонка чи модифікатор існуючого класу. Він надає інше або перекладене уявлення цього класу.

Структура

Нижче застарілий метод display() для компонента Rectangle, який використовується в Rectangle, розраховує отримати параметри «x, y, w, h». Але клієнт хоче передати «верхні ліві x та y» та «нижні праві x і y». Ця неузгодженість може бути виправлена шляхом додавання додаткового рівня абстракції – тобто об'єкта адаптера.

Адаптер також можна розглядати як «обгортку».

Приклад

Шаблон адаптера дозволяє іншим несумісним класам працювати разом, перетворюючи інтерфейс одного класу на інтерфейс, очікуваний клієнтами. Сокети з гніздами є прикладом адаптера. Розетка прикріплюється до храповика за умови, що розмір приводу однаковий. Типові розміри дисків у США становлять 1/2" та 1/4". Очевидно, що храповий механізм 1/2 "не входитиме в гніздо 1/4", якщо адаптер не використовується. Адаптер з діагоналлю від 1/2 дюйма до 1/4" має 1/2" гніздове з'єднання для кріплення на шейкер 1/2" та 1/4" штире з'єднання для установки в гніздо 1/4".

Контрольний список

  1. Визначте гравців: компонент (и), які хочете використовувати (тобто клієнт), та компонент, який необхідно адаптувати (наприклад, що адаптується).
  2. Визначте інтерфейс, який потрібний клієнту.
  3. Створіть клас обгортка, який може відповідати інтерфейсу клієнта.
  4. Клас адаптера/обгортки «має» екземпляр класу, що адаптується.
  5. Клас адаптера/обгортки «порівняє» інтерфейс клієнта з адаптованим інтерфейсом.
  6. Клієнт використовує новий інтерфейс

Емпіричні правила

  • Адаптер дозволяє працювати класам після того, як вони розроблені; Міст змушує їх працювати до того, як вони будуть розроблені.
  • Міст розроблений заздалегідь, щоб абстракція та реалізація змінювалися незалежно. Адаптер модернізує, щоби спільні класи працювали разом.
  • Адаптер надає інший інтерфейс свого об'єкта. Проксі забезпечує той самий інтерфейс. Декоратор забезпечує розширений інтерфейс.
  • Адаптер призначений зміни інтерфейсу існуючого об'єкта. Декоратор покращує роботу іншого об'єкта без зміни його інтерфейсу. Таким чином, декоратор більш прозорий для застосування, ніж адаптер. Як наслідок Декоратор підтримує рекурсивну композицію, що неможливо при використанні чистих адаптерів.
  • Фасад визначає новий інтерфейс, тоді як Adapter використовує старий інтерфейс. Пам'ятайте, що адаптер підтримує два існуючі інтерфейси, а не визначає абсолютно новий.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 21:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 23:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 17:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 16:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 20:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
AH
Abdul Hadi13 лютого 2025 р. 15:21
Are you Looking for best painter services in Qatar? Looking for top painter Services in Qatar? Get high-quality, affordable, and professional painting for homes & offices. Contact expert painters today!
d
dubaicushions13 лютого 2025 р. 15:17
Are Looking for custom swing cushions in Dubai for home decor? Looking for Custom Swing Cushions in Dubai? Get high-quality, weather-resistant, and stylish cushions for your outdoor swing. Order now for comfort & elegance!
d
dubaicustomizedsofa13 лютого 2025 р. 15:11
Are you Looking for a custom sofa in Dubai? Looking for a Custom Sofa in Dubai ? Get high-quality, stylish, and tailor-made sofas to match your space. Order now for comfort, luxury, and perfect design!
b
blinds1211 лютого 2025 р. 16:08
Why Bamboo Blinds Are the Perfect Choice for Your Home When it comes to enhancing the aesthetics and functionality of your living space, choosing the right window treatment is crucial. Bamboo blinds have emerged as a popular choice for homeowners wh…
i
imperial313011 лютого 2025 р. 15:40
How to Select the Right Carpet for Your Bedroom Aesthetic Choosing the perfect carpet for your bedroom involves more than just picking a color or pattern you like. Carpets can transform the ambiance of your space, adding warmth, comfort, and style. How…

Слідкуйте за нами в соціальних мережах