Назад к вопросам
Junior
69
questionbank

Что такое адаптер в контексте программирования на Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Применяется, когда:

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

Существует два основных типа реализации:

  • Адаптер классов (через наследование): Адаптер наследует от адаптируемого класса и реализует целевой интерфейс.
  • Адаптер объектов (через композицию): Адаптер содержит экземпляр адаптируемого класса и реализует целевой интерфейс, делегируя вызовы адаптируемому объекту.

Пример адаптера объектов:

// Целевой интерфейс
interface Target {
    void request();
}

// Адаптируемый класс с несовместимым интерфейсом
class Adaptee {
    public void specificRequest() {
        System.out.println("Specific request from Adaptee");
    }
}

// Адаптер, реализующий Target и использующий Adaptee
class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        // Преобразуем вызов request() к specificRequest() Adaptee
        adaptee.specificRequest();
    }
}

// Пример использования
public class Client {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee); // Используем адаптер
        target.request(); // Вызываем метод через целевой интерфейс
    }
}

Преимущества адаптера:

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