Шаблон проектирования адаптера используется для соединения двух несовместимых классов с помощью интерфейса, чтобы обернуть существующий класс и сделать его совместимым с интерфейсом клиента.
Давайте рассмотрим случай, когда у нас есть приложение, которое преобразует дни в месяцы. И теперь мы хотим добавить в это приложение новую функцию, позволяющую пользователю конвертировать вставленные дни в недели. Чтобы удовлетворить эту потребность, мы создадим адаптер, который преобразует возвращаемые месяцы в недели.
Во-первых, мы создадим интерфейс Months, который должен конвертировать вставленные дни в месяцы:
А теперь создадим реализацию этого интерфейса:
Затем мы создадим интерфейс адаптера, который работает почти так же, как и предыдущий интерфейс, но возвращает не месяцы, а недели:
И его реализация состоит из еще одного частного метода для преобразования месяцев в недели:
И теперь он завершен. Конечно, мы могли бы изменить класс «ConvertMonths», чтобы получить желаемый результат, однако этот паттерн дает возможность сгибать код, не меняя базовый код, а добавляя новые функции. Это повышает гибкость приложения для будущих изменений и упрощает обслуживание.
И теперь это утверждение будет верным:
Как мы видим здесь, адаптер преобразовал дни в недели.
Этот шаблон используется, когда мы хотим использовать функциональность компонента, которая несовместима с текущим приложением, или когда мы хотим повторно использовать некоторые коды, не изменяя их.
Шаблоны структурного проектирования определяют наиболее подходящие решения для разработки сложных структурированных приложений с несколькими классами и объектами. Они помогают упростить отношения объектов и классов, сосредоточив внимание на том, как они связаны друг с другом.
Код доступен в проекте Github.
Существует еще 6 шаблонов структурного проектирования: