Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы / Лабораторная_работа_по_паттернам23.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
1.18 Mб
Скачать

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

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

Проблема

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

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

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

Решение

Вы можете создать адаптер. Это объект-переводчик, который трансформирует интерфейс или данные одного объекта в такой вид, чтобы он стал понятен другому объекту.

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

  1. Адаптер имеет интерфейс, который совместим с одним из объектов.

  2. Поэтому этот объект может свободно вызывать методы адаптера.

  3. Адаптер получает эти вызовы и перенаправляет их второму объекту, но уже в том формате и последовательности, которые понятны второму объекту.

Программа может работать со сторонней библиотекой через адаптер.

Таким образом, в приложении вы могли бы создать класс XML_To_JSON_Adapter, который бы оборачивал объект того или иного класса библиотеки аналитики.

Ваш код посылал бы адаптеру запросы в формате XML, а адаптер сначала транслировал входящие данные в формат JSON, а затем передавал бы их методам объекта аналитики.

Паттерн Адаптер (Adapter), также известный как Обертка (Wrapper), является структурным (Structural) паттерном проектирования. Его цель преобразовать интерфейс класса в другой интерфейс, который ожидают клиенты. Адаптер позволяет классам работать вместе, что иначе невозможно из-за несовместимых интерфейсов.

Примеры из реального мира:

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

  • Другим примером будет известный адаптер питания; вилка с тремя ножками не может быть подключена к розетке с двумя выводами, для этого необходимо использовать адаптер питания, который делает его совместимым с розеткой с двумя выводами.

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

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

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

Имплементация в Java – это процесс создания класса, который реализует определенный интерфейс или наследует абстрактный класс. Имплементирование позволяет классу использовать функциональность интерфейса или абстрактного класса, определяя тело всех его методов.

Основной механизм имплементации в Java реализован через ключевое слово implements.

Используйте паттерн адаптер, когда:

  • вы хотите использовать существующий класс, и его интерфейс не соответствует тому, который вам нужен;

  • вы хотите создать повторно используемый класс, который взаимодействует с несвязанными или непредвиденными классами, то есть классами, которые не обязательно имеют совместимые интерфейсы;

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

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