Структурные шаблоны проектирования: Adapter | OTUS

Структурные шаблоны проектирования: Adapter

Arch_headline_970x70-1801-410a68.png

В структурных шаблонах проектирования рассматривается вопрос о том, каким образом из классов и объектов формируются более крупные структуры. Иными словами, структурные шаблоны, как правило, связаны с композицией объектов и с тем, как именно сущности могут использовать друг друга. По сути, они помогают узнать ответ на вопрос «Как создать программный компонент?» Один из таких шаблонов — «Адаптер» (Adapter).

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

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

Таким образом, шаблон «Адаптер» дает возможность оборачивать несовместимые объекты в адаптер с целью сделать их совместимыми с другим классом.

Как это выглядит в коде

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

Поначалу у нас есть интерфейс Lion, реализующий всех львов:

1-1801-b6cde5.png

На любую реализацию Lion-интерфейса охотится Hunter:

2-1801-ed063d.png

Теперь представьте, что надо добавить в игру WildDog, чтобы Hunter _смог охотиться и на нее. Но сделать это напрямую нельзя, ведь _WildDog -- это другой интерфейс. Для обеспечения совместимости нам и пригодится адаптер:

3-1801-530ceb.png

Осталось рассмотреть способ применения:

4-1801-e43750.png

Также вам может быть интересен пример на Java: https://github.com/iluwatar/java-design-patterns/tree/master/adapter.

Arch_headline_970x70-1801-410a68.png

По материалам статьи «Design Patterns for Humans» — https://github.com/kamranahmedse/design-patterns-for-humans.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто