Назад к вопросам
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): Использует целевой интерфейс для взаимодействия с объектами.