Skip to content

Урок 7.1. Адаптер

Шаблон проектирования "Адаптер" (Adapter) используется для обеспечения совместимости между двумя несовместимыми интерфейсами. Он позволяет объектам с несовместимыми интерфейсами работать вместе, действуя как "мост" между ними. Это особенно полезно, когда вы хотите использовать существующий класс, но его интерфейс не соответствует требованиям вашего приложения.

Пример использования паттерна Adapter на Java

Рассмотрим пример, в котором у нас есть класс OldSystem, который имеет метод для выполнения определенной задачи, и мы хотим использовать его в новом приложении, которое ожидает другой интерфейс.

Шаг 1: Создание интерфейса

public interface NewSystem {
    void performAction();
}

Шаг 2: Реализация старой системы

public class OldSystem {
    public void execute() {
        System.out.println("Executing action in Old System");
    }
}

Шаг 3: Реализация адаптера

public class OldSystemAdapter implements NewSystem {
    private OldSystem oldSystem;

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

    @Override
    public void performAction() {
        oldSystem.execute();
    }
}

Шаг 4: Использование адаптера

Теперь мы можем использовать наш адаптер в коде:

public class AdapterPatternDemo {
    public static void main(String[] args) {
        OldSystem oldSystem = new OldSystem();
        NewSystem newSystem = new OldSystemAdapter(oldSystem);

        // Используем новый интерфейс
        newSystem.performAction();
    }
}

Объяснение

  1. Интерфейс NewSystem: Определяет метод performAction(), который будет использоваться в новом приложении.

  2. Класс OldSystem: Имеет метод execute(), который мы хотим использовать, но он не соответствует новому интерфейсу.

  3. Класс OldSystemAdapter: Реализует интерфейс NewSystem и содержит ссылку на OldSystem. В методе performAction() адаптер вызывает метод execute() старой системы, обеспечивая совместимость.

  4. Класс AdapterPatternDemo: Демонстрирует использование адаптера. Мы создаем экземпляр OldSystem, затем создаем адаптер и используем его через новый интерфейс.

Заключение

Паттерн "Адаптер" позволяет интегрировать существующие классы с несовместимыми интерфейсами, обеспечивая гибкость и возможность повторного использования кода. В приведенном примере мы увидели, как адаптер может помочь использовать старую систему в новом приложении, не изменяя саму старую систему. Это делает код более модульным и упрощает его поддержку.