← Назад к вопросам

Что такое паттерн Wrapper компонента?

2.0 Middle🔥 191 комментариев
#SOLID и паттерны проектирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Паттерн Wrapper компонента

Wrapper (оборотка) — это структурный паттерн проектирования, который позволяет добавлять новую функциональность к существующим объектам, оборачивая их в специальные объекты-обёртки. В контексте компонентов это означает создание компонента, который окружает другой компонент для расширения его функциональности без изменения исходного кода.

Основные концепции

Паттерн Wrapper (также известный как Decorator) предоставляет гибкую альтернативу наследованию для расширения функциональности объектов. Вместо создания подклассов, мы оборачиваем объект новым объектом, добавляющим нужное поведение.

Ключевые характеристики:

  • Добавление функциональности в runtime
  • Выполнение работы до и после вызова исходного метода
  • Возможность комбинирования нескольких wrapper'ов
  • Соответствие принципу Open/Closed

Простой пример Wrapper паттерна

public interface Component {
    void operation();
}

public class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("Выполняю базовую операцию");
    }
}

public abstract class Decorator implements Component {
    protected Component component;
    
    public Decorator(Component component) {
        this.component = component;
    }
    
    @Override
    public void operation() {
        component.operation();
    }
}

public class LoggingDecorator extends Decorator {
    public LoggingDecorator(Component component) {
        super(component);
    }
    
    @Override
    public void operation() {
        System.out.println("[LOG] Начало операции");
        super.operation();
        System.out.println("[LOG] Конец операции");
    }
}

Практический пример: обработка HTTP запросов

public interface HttpHandler {
    Response handle(Request request);
}

public class BaseHttpHandler implements HttpHandler {
    @Override
    public Response handle(Request request) {
        return new Response("Обработан запрос: " + request.getPath());
    }
}

public class AuthenticationWrapper implements HttpHandler {
    private final HttpHandler handler;
    
    public AuthenticationWrapper(HttpHandler handler) {
        this.handler = handler;
    }
    
    @Override
    public Response handle(Request request) {
        if (!isAuthenticated(request)) {
            return new Response("Ошибка: не авторизован", 401);
        }
        return handler.handle(request);
    }
    
    private boolean isAuthenticated(Request request) {
        String token = request.getHeader("Authorization");
        return token != null && validateToken(token);
    }
}

Преимущества

  • Динамическое добавление функциональности без изменения исходного кода
  • Гибкость: можно комбинировать несколько wrapper'ов
  • Соответствие принципу Single Responsibility
  • Альтернатива наследованию

Когда использовать Wrapper

  • Добавление функциональности к классам в runtime
  • Логирование, кэширование, валидация
  • Аутентификация и авторизация
  • Трансформация данных
  • Обработка исключений

Паттерн Wrapper — мощный инструмент для создания гибких и расширяемых приложений.

Что такое паттерн Wrapper компонента? | PrepBro