Добавить в корзинуПозвонить
Найти в Дзене

Паттерн проектирования «Адаптер»

Паттерн проектирования «Адаптер» — это структурный шаблон, предназначенный для обеспечения совместимости между объектами с различными интерфейсами. Он позволяет объектам с несовместимыми интерфейсами взаимодействовать, выступая в роли посредника, который преобразует интерфейс одного объекта в интерфейс, понятный другому. Проблема Представьте, что вы разрабатываете приложение для биржевой торговли, которое получает котировки в формате XML и отображает их в виде графиков. В какой-то момент вы решаете интегрировать стороннюю аналитическую библиотеку, которая работает только с данными в формате JSON. Поскольку ваше приложение использует XML, возникает проблема несовместимости форматов данных. Решение Для решения этой проблемы можно создать адаптер — объект, который преобразует интерфейс или данные одного объекта в формат, совместимый с другим объектом. В данном случае, адаптер будет преобразовывать данные из XML в JSON, позволяя вашему приложению использовать стороннюю библиотеку без измен
Оглавление
Паттерн проектирования «Адаптер»
Паттерн проектирования «Адаптер»

Паттерн проектирования «Адаптер» — это структурный шаблон, предназначенный для обеспечения совместимости между объектами с различными интерфейсами. Он позволяет объектам с несовместимыми интерфейсами взаимодействовать, выступая в роли посредника, который преобразует интерфейс одного объекта в интерфейс, понятный другому.

Проблема

Представьте, что вы разрабатываете приложение для биржевой торговли, которое получает котировки в формате XML и отображает их в виде графиков. В какой-то момент вы решаете интегрировать стороннюю аналитическую библиотеку, которая работает только с данными в формате JSON. Поскольку ваше приложение использует XML, возникает проблема несовместимости форматов данных.

Решение

Для решения этой проблемы можно создать адаптер — объект, который преобразует интерфейс или данные одного объекта в формат, совместимый с другим объектом. В данном случае, адаптер будет преобразовывать данные из XML в JSON, позволяя вашему приложению использовать стороннюю библиотеку без изменения ее кода.

Адаптеры могут не только преобразовывать данные, но и обеспечивать совместимость между объектами с различными интерфейсами. Они работают следующим образом:

  1. Адаптер реализует интерфейс, совместимый с одним из объектов.
  2. Этот объект вызывает методы адаптера.
  3. Адаптер перенаправляет вызовы ко второму объекту, преобразуя данные и вызовы в формат, понятный этому объекту.

Таким образом, адаптер позволяет двум несовместимым объектам работать вместе без изменения их исходного кода.

Аналогия из реальной жизни

Хорошим примером адаптера в реальной жизни является переходник для розеток. Разные страны используют различные стандарты розеток и вилок. Когда вы путешествуете с устройством, вилка которого не подходит к розетке в другой стране, вы используете переходник (адаптер), который позволяет подключить ваше устройство к розетке другого стандарта.

Структура паттерна

Существует два основных варианта реализации паттерна «Адаптер»: адаптер объектов и адаптер классов.

  • Адаптер объектов: использует композицию, то есть адаптер содержит ссылку на экземпляр адаптируемого класса. Этот подход применяется в языках программирования, не поддерживающих множественное наследование.
  • Адаптер классов: использует множественное наследование, при котором адаптер наследует интерфейсы как целевого, так и адаптируемого классов. Этот подход возможен в языках, поддерживающих множественное наследование, таких как C++.

Пример на Python

Рассмотрим пример использования паттерна «Адаптер» на языке Python.

Посмотреть код на gist

-2

В этом примере у нас есть класс RoundHole, представляющий круглое отверстие, и класс RoundPeg, представляющий круглый колышек. Класс SquarePeg представляет квадратный колышек, который несовместим с круглым отверстием. Чтобы использовать квадратный колышек с круглым отверстием, мы создаем адаптер SquarePegAdapter, который наследует RoundPeg и принимает экземпляр SquarePeg. Адаптер переопределяет метод get_radius, вычисляя эквивалентный радиус для квадратного колышка, позволяя таким образом определить, подходит ли квадратный колышек к круглому отверстию.

Паттерн «Адаптер» широко используется в программировании для интеграции новых компонентов в существующие системы, особенно когда новые компоненты имеют интерфейсы, отличные от тех, которые ожидает система. Он позволяет повысить гибкость и расширяемость системы, обеспечивая возможность работы с различными интерфейсами без изменения существующего кода.

Присоединяйтесь в наш телеграм - там общаемся и раздаём бесплатные курсы😱

-3

Наш сайт:

future-people.ru

Наши курсы:

Python [СТАРТ]
Git и GitHub [НАЧИНАЮЩИЙ+]
Python для Excel с библиотекой openpyxl
Создание PDF с помощью Python и ReportLab
Python: подготовка к собеседованию Часть 1

Наши программы:

Python [СТАРТ] + Git и GitHub [НАЧИНАЮЩИЙ+] 2 курса
Профессия: Python-разработчик [Python | Git | SQL | Linux] 4 курса
Python для работы с Excel и PDF 2 курса

Наши социальные сети:

TelegramYoutube | Dzen