Встречается на собеседованиях • сегодня

Какую проблему решает декоратор

Декораторы — это структурный шаблон проектирования, используемый для динамического добавления нового функционала объекту без изменения его структуры. Этот шаблон создаёт обёртку вокруг оригинального объекта, позволяя тем самым расширять его возможности. Широко используются в ООП для реализации принципа открытости/закрытости, согласно которому программные сущности должны быть открыты для расширения, но закрыты для изменения.

Проблемы, которые он решает:
1. Добавление новых обязанностей объектам: Декоратор позволяет добавлять новые функции объектам на лету, не изменяя их код. Это полезно, когда есть необходимость расширить функциональность объекта без наследования или изменения исходного класса.
   

2. Гибкость в сравнении с наследованием: В отличие от наследования, которое является статическим и применяется ко всем экземплярам класса, декораторы предоставляют способ добавления функционала индивидуально к определённым объектам.

3. Соблюдение принципа единственной ответственности: Декораторы позволяют разбить функциональность на мелкие части, где каждый декоратор решает только одну задачу. Это упрощает поддержку и расширение функциональности.

4. Создание слоёв обёрток вокруг объекта: Декораторы могут быть "слоёны", то есть один декоратор может оборачивать другой, что позволяет комбинировать их для создания сложных поведенческих моделей.

Пример:
Декораторы часто используются для расширения возможностей функций и методов. Примером может служить добавление логирования к функции:

text
```php
def logger(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        print(f"{func.__name__} called with {args} and returned {result}")
        return result
    return wrapper

@logger
def add(x, y):
    return x + y

# Вызов функции add автоматически приведёт к логированию
result = add(5, 3)
```

Декоратор `logger` добавляет функционал логирования к функции `add`, не изменяя её первоначального кода. Таким образом, декораторы предоставляют мощный инструмент для расширения функциональности и улучшения гибкости программ без нарушения их структуры.

April 7, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы