Back to questions
Aston
Junior — Middle
57
Объясните отличия между паттернами декоратор и прокси и их ситуации применения.
Companies where asked
Answer from AI
sobes.tech AI
Паттерны «Декоратор» и «Прокси» имеют схожую структуру — оба оборачивают объект и реализуют тот же интерфейс, но отличаются по назначению и применению.
Декоратор:
- Используется для динамического добавления новых обязанностей объекту без изменения его кода.
- Позволяет расширять функциональность объекта.
- Пример: добавление логирования, кэширования, валидации поверх базового сервиса.
Прокси:
- Контролирует доступ к объекту, может управлять созданием, инициализацией или защитой.
- Используется для ленивой загрузки, контроля доступа, удалённого вызова.
Пример различий:
- Декоратор добавляет поведение (например, оборачивает поток ввода-вывода, добавляя шифрование).
- Прокси может проверять права доступа перед вызовом метода реального объекта.
interface Service {
void execute();
}
// Декоратор
class LoggingDecorator implements Service {
private Service wrapped;
public LoggingDecorator(Service s) { this.wrapped = s; }
public void execute() {
System.out.println("Before execution");
wrapped.execute();
System.out.println("After execution");
}
}
// Прокси
class AccessProxy implements Service {
private Service realService;
public AccessProxy(Service s) { this.realService = s; }
public void execute() {
if (checkAccess()) {
realService.execute();
} else {
throw new SecurityException("Access denied");
}
}
private boolean checkAccess() { return true; /* логика проверки */ }
}
Итого, декоратор расширяет функциональность, прокси контролирует доступ и управление объектом.