Омельченко Михаил | Django School

Омельченко Михаил | Django School 

О веб разработке, IT и AI простым языком

23subscribers

93posts

Паттерн Декоратор простыми словами

Что такое паттерн Декоратор? 
Паттерн Декоратор является структурным паттерном проектирования, который позволяет добавлять новую функциональность к объектам, не изменяя их исходного кода. Он предоставляет гибкий способ расширить и изменить поведение объекта, оборачивая его в другие объекты (декораторы) и затем добавляя новые возможности с помощью этих декораторов. 
Как это работает? 
Возьмем пример с кофейней. У нас есть базовый класс "Кофе", который предоставляет базовый функционал и мы хотим добавить дополнительные опции, такие как "молоко", "сироп" или "взбитые сливки", не изменяя класс "Кофе". Мы можем использовать паттерн Декоратор, создавая для каждой опции отдельный декоратор, который оборачивает базовый объект "Кофе" и добавляет дополнительную функциональность. 
Зачем это нужно? 
✅ Гибкость и расширяемость: паттерн Декоратор позволяет добавлять и комбинировать различные декораторы, что дает возможность легко модифицировать функциональность объектов. 
✅ Изоляция изменений: декораторы могут быть добавлены и удалены независимо друг от друга, что позволяет изменять функциональность объектов без изменения их исходного кода. 
✅ Улучшение поддержки: паттерн Декоратор способствует созданию более чистого и читаемого кода, разделяя функциональность на отдельные классы и упрощая поддержку и модификацию кода. 
Участники 
- Component: абстрактный класс, который определяет интерфейс для наследуемых объектов.
- ConcreteComponent: конкретная реализация компонента, в которую с помощью декоратора добавляется новая функциональность.
- Decorator: собственно декоратор, реализуется в виде абстрактного класса и имеет тот же базовый класс, что и декорируемые объекты. Поэтому базовый класс Component должен быть по возможности легким и определять только базовый интерфейс. 
Класс декоратора также хранит ссылку на декорируемый объект в виде объекта базового класса Component и реализует связь с базовым классом как через наследование, так и через отношение агрегации. 
- Класс ConcreteDecorator: представляют дополнительные функциональности, которыми должен быть расширен объект ConcreteComponent. 
Телеграм канал - https://t.me/django_school 
🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript). 
Обучаю с нуля, а так же провожу консультации для мидлов и сеньоров. 
Пишите - https://t.me/DJWOMS 
🌐 #IT #программирование #паттерн 
Go up