Ответ
Декоратор — это структурный паттерн проектирования и языковая конструкция (в таких языках, как Python), которая позволяет динамически добавлять новое поведение объектам или функциям, оборачивая их, не изменяя их исходный код.
Основная идея: Расширение функциональности через композицию, а не наследование. Соответствует принципу открытости/закрытости (Open/Closed Principle).
Преимущества:
- Гибкость: Поведение можно добавлять и комбинировать во время выполнения.
- Разделение ответственности: Каждый декоратор решает одну задачу (логирование, кеширование, проверка прав).
- Чистый код: Избегание создания сложных иерархий классов.
Пример на Python (декоратор функции):
def log_execution(func):
"""Декоратор, логирующий вызов функции."""
def wrapper(*args, **kwargs):
print(f"Вызывается функция {func.__name__} с аргументами: {args}, {kwargs}")
result = func(*args, **kwargs)
print(f"Функция {func.__name__} вернула: {result}")
return result
return wrapper
@log_execution
def add(a, b):
return a + b
print(add(5, 3))
# Вывод:
# Вызывается функция add с аргументами: (5, 3), {}
# Функция add вернула: 8
# 8
Распространённые сценарии использования:
- Логирование вызовов функций.
- Кеширование (мемоизация) результатов.
- Контроль доступа и аутентификация.
- Валидация входных данных или результатов.
- Замер времени выполнения (бенчмаркинг).