Паттерны

Расскажите про паттерн «Адаптер» (Adapter)


Паттерн «Адаптер» (Adapter) относится к структурным паттернам проектирования и используется для соединения двух несовместимых интерфейсов. Он позволяет объектам работать вместе, которые в противном случае не могли бы этого сделать из-за несовместимости их интерфейсов. Основная идея паттерна «Адаптер» заключается в создании класса-адаптера, который преобразует интерфейс одного класса в интерфейс другого класса. Адаптер обеспечивает совместимость между классами, позволяя им взаимодействовать и работать вместе. Пример реализации паттерна «Адаптер» на языке Java: // Интерфейс, который нужно адаптировать public interface Target { void request(); } // Класс, реализующий интерфейс Target public class ConcreteTarget implements Target { @Override public void request() { System.out.println("ConcreteTarget: выполнение запроса"); } } // Адаптируемый класс public class Adaptee { public void specificRequest() { System.out.println("Adaptee: выполнение специфического запроса"); } } // Адаптер public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } В данном примере у нас есть интерфейс Target, который представляет целевой интерфейс, и класс ConcreteTarget, который реализует этот интерфейс. У нас также есть класс Adaptee, который представляет адаптируемый класс с несовместимым интерфейсом. Для связи между Target и Adaptee мы создаем класс Adapter, который реализует интерфейс Target и содержит объект Adaptee. В методе request() класса Adapter мы вызываем метод specificRequest() объекта Adaptee, что позволяет адаптировать интерфейс Adaptee к интерфейсу Target. Теперь объекты класса ConcreteTarget и класса Adapter могут работать вместе, хотя их интерфейсы несовместимы. Класс Adapter обеспечивает совместимость между ними. Паттерн «Адаптер» позволяет использовать существующий класс с несовместимым интерфейсом, не изменяя его код. Это позволяет повторно использовать существующий код и обеспечивает гибкость и расширяемость системы.


Копировать ссылку