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

В чем заключается основная идея паттерна «Адаптер»?

Sobes Copilot

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

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

sobes.tech AI

Позволяет объектам с несовместимыми интерфейсами работать вместе, "обертывая" одни объекты для предоставления совместимого интерфейса другим.

Пример:

// Несовместимый интерфейс
interface OldSystem {
    void performLegacyOperation();
}

// Реализация несовместимого интерфейса
class OldSystemImpl implements OldSystem {
    @Override
    public void performLegacyOperation() {
        System.out.println("Executing legacy operation.");
    }
}

// Требуемый интерфейс
interface NewSystem {
    void performModernOperation();
}

// Адаптер
class Adapter implements NewSystem {
    private OldSystem oldSystem; // Композиция: адаптер содержит объект старой системы

    public Adapter(OldSystem oldSystem) {
        this.oldSystem = oldSystem;
    }

    @Override
    public void performModernOperation() {
        // Вызов метода старой системы через адаптированный интерфейс
        oldSystem.performLegacyOperation();
    }
}

// Клиентский код, использующий новый интерфейс
class Client {
    private NewSystem newSystem;

    public Client(NewSystem newSystem) {
        this.newSystem = newSystem;
    }

    public void executeOperation() {
        newSystem.performModernOperation();
    }
}

// Использование адаптера
//public class Main {
//    public static void main(String[] args) {
//        OldSystem oldSystem = new OldSystemImpl();
//        NewSystem adapter = new Adapter(oldSystem); // Создание адаптера

//        Client client = new Client(adapter); // Клиент работает с адаптированным интерфейсом
//        client.executeOperation();
//    }
//}

  • Адаптируемый объект (Adaptee): Класс с несовместимым интерфейсом (OldSystemImpl).
  • Целевой интерфейс (Target): Интерфейс, который клиент ожидает (NewSystem).
  • Адаптер (Adapter): Класс, реализующий целевой интерфейс (Adapter) и содержащий ссылку на адаптируемый объект. Он преобразует вызовы целевого интерфейса в вызовы адаптируемого объекта.
  • Клиент (Client): Использует целевой интерфейс для взаимодействия с объектами.