Урок 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();
}
}
Объяснение
-
Интерфейс
NewSystem
: Определяет методperformAction()
, который будет использоваться в новом приложении. -
Класс
OldSystem
: Имеет методexecute()
, который мы хотим использовать, но он не соответствует новому интерфейсу. -
Класс
OldSystemAdapter
: Реализует интерфейсNewSystem
и содержит ссылку наOldSystem
. В методеperformAction()
адаптер вызывает методexecute()
старой системы, обеспечивая совместимость. -
Класс
AdapterPatternDemo
: Демонстрирует использование адаптера. Мы создаем экземплярOldSystem
, затем создаем адаптер и используем его через новый интерфейс.
Заключение
Паттерн "Адаптер" позволяет интегрировать существующие классы с несовместимыми интерфейсами, обеспечивая гибкость и возможность повторного использования кода. В приведенном примере мы увидели, как адаптер может помочь использовать старую систему в новом приложении, не изменяя саму старую систему. Это делает код более модульным и упрощает его поддержку.