Назад к вопросам
Simbirsoft
Junior — Middle
67
Объясните различия между паттернами декоратор, прокси и адаптер в контексте объектно-ориентированного программирования.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Паттерны Декоратор, Прокси и Адаптер решают разные задачи, хотя все они работают с объектами и интерфейсами:
-
Декоратор (Decorator) — добавляет объектам новую функциональность динамически, оборачивая их. Позволяет расширять поведение без изменения исходного класса.
-
Прокси (Proxy) — контролирует доступ к объекту, может добавлять логику при вызове методов (например, ленивую инициализацию, кеширование, безопасность).
-
Адаптер (Adapter) — преобразует интерфейс одного класса в интерфейс, ожидаемый клиентом. Используется для интеграции несовместимых интерфейсов.
Пример на Java:
// Интерфейс
interface Service {
void operation();
}
// Реализация
class RealService implements Service {
public void operation() {
System.out.println("Выполнение операции");
}
}
// Декоратор
class Decorator implements Service {
private Service wrappee;
public Decorator(Service s) { this.wrappee = s; }
public void operation() {
System.out.println("Перед операцией");
wrappee.operation();
System.out.println("После операции");
}
}
// Прокси
class Proxy implements Service {
private RealService realService;
public void operation() {
if (realService == null) {
realService = new RealService(); // ленивое создание
}
realService.operation();
}
}
// Адаптер
class LegacyService {
public void oldOperation() {
System.out.println("Старый метод");
}
}
class Adapter implements Service {
private LegacyService legacy;
public Adapter(LegacyService legacy) {
this.legacy = legacy;
}
public void operation() {
legacy.oldOperation();
}
}