Казалось бы, что особенного в адаптере для розеток? Например, то, что есть структурный паттерн проектирования, который работает по тому же принципу. Рассказываем об этом на курсе «Архитектура приложений» и делимся кусочком лекции с вами 👇
Структурные паттерны позволяют нам упростить работу со структурами или из более простых структур составить более комплексные и сложные.
Виды структурных паттернов:
адаптер;
мост;
компоновщик;
декоратор;
фасад;
легковес;
заместитель.
Каждый из вас, скорее всего, сталкивался с одним из паттернов в реальной жизни. Например, в путешествиях в некоторых странах ваш формат вилок для зарядки ноутбуков, фенов, утюгов не подходил к розеткам, а адаптер решал эту проблему.
То же самое происходит и в программных системах. Как выглядит паттерн на диаграмме, показали на слайде выше 👆
Допустим, у нас есть клиент, который умеет взаимодействовать с определённым интерфейсом, и есть система, которая может помочь решить его проблему, но интерфейс у неё другой. Клиентский код умеет общаться с интерфейсом, вызывая один метод, и передавать ему какие-то данные, но сервис, с которым нам предстоит взаимодействовать, имеет абсолютно другой метод и абсолютно другие данные.
В этом случае самым простым и выручающим вариантом будет использование паттерна «Адаптер». Мы будем создавать специальный класс, который будет реализовывать интерфейс, с которым будет взаимодействовать клиент, и обращаться к нужному нам сервису с нужной функциональностью, но с другим интерфейсом.
Плюсы паттерна адаптер:
+ создает «мост» между интерфейсами (адаптирует нашего клиента с привычными интерфейсом к незнакомому ему сервису или классу); + изолирует от клиента подробности преобразования различных интерфейсов.
Минус:
— сложно преобразовать параметры вызовов функций, если в адаптируемом интерфейсе другие абстракции.
Узнать больше об адаптерах, научиться писать как разработчик, а думать как архитектор и создавать поддерживаемые системы можно на курсе «Архитектура приложений». Старт потока 26 мая. Занять место — по ссылке.