Шаблон проектирования «Декоратор» (Decorator) позволяет динамически добавлять новые функции или поведения к объектам, не изменяя их исходного кода.
Декоратор работает путем создания оболочек (или «декораторов») вокруг существующих объектов, которые добавляют новые функции или поведения к объектам. Декораторы обладают тем же интерфейсом, что и исходные объекты, что позволяет использовать их вместо исходных объектов.
Например, допустим у нас есть объект «комната» (Room), который имеет базовый набор функций, таких как получение площади, количества окон, освещения и т. д. Для добавления новой функциональности, например, улучшения освещения комнаты, мы можем создать декоратор «улучшенное освещение» (ImprovedLightingDecorator), который оборачивает исходный объект «комната» и добавляет новую функциональность.
Таким образом, шаблон декоратор позволяет добавлять новую функциональность или поведение объектов динамически и без изменения их исходного кода, что делает код более гибким и расширяемым.