0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: паттерн, декоратор, шаблон проектирования, структурные шаблоны</p>
1
<p>Теги: паттерн, декоратор, шаблон проектирования, структурные шаблоны</p>
2
<p><strong>Декоратор</strong>представляет собой структурный шаблон проектирования, который позволяет динамически подключать к объекту дополнительное поведение. По сути, это более гибкая альтернатива практике по созданию подклассов с целью расширения функциональности.</p>
2
<p><strong>Декоратор</strong>представляет собой структурный шаблон проектирования, который позволяет динамически подключать к объекту дополнительное поведение. По сути, это более гибкая альтернатива практике по созданию подклассов с целью расширения функциональности.</p>
3
<p>Но давайте приведем практический пример из жизни. Допустим, вы обладаете своим автосервисом. Каким образом вы станете рассчитывать сумму в счетах за оказываемые услуги? Как правило, вы выбираете одну услугу, после чего динамически добавляете к ней расценки на конкретные предоставляемые услуги, то есть пока не будет сформирована окончательная стоимость. И вот тут каждый тип услуги и будет<strong>декоратором</strong>.</p>
3
<p>Но давайте приведем практический пример из жизни. Допустим, вы обладаете своим автосервисом. Каким образом вы станете рассчитывать сумму в счетах за оказываемые услуги? Как правило, вы выбираете одну услугу, после чего динамически добавляете к ней расценки на конкретные предоставляемые услуги, то есть пока не будет сформирована окончательная стоимость. И вот тут каждый тип услуги и будет<strong>декоратором</strong>.</p>
4
<p>Можно сказать еще проще: декоратор дает возможность динамически менять поведение объекта в процессе работы путем оборачивания в объект класса декоратора.</p>
4
<p>Можно сказать еще проще: декоратор дает возможность динамически менять поведение объекта в процессе работы путем оборачивания в объект класса декоратора.</p>
5
<p>Но давайте лучше перейдем к коду. Теперь приведем пример с кофе. Итак, поначалу мы имеем простой<strong>Coffee</strong>и интерфейс, его реализующий:</p>
5
<p>Но давайте лучше перейдем к коду. Теперь приведем пример с кофе. Итак, поначалу мы имеем простой<strong>Coffee</strong>и интерфейс, его реализующий:</p>
6
<p>Однако мы желаем сделать наш код расширяемым, дабы в случае надобности мы могли его менять. Следовательно, можно сделать ряд дополнений (то есть мы используем<strong>декораторы</strong>):</p>
6
<p>Однако мы желаем сделать наш код расширяемым, дабы в случае надобности мы могли его менять. Следовательно, можно сделать ряд дополнений (то есть мы используем<strong>декораторы</strong>):</p>
7
<p>Ну а теперь мы уже можем готовить<strong><em>разный</em></strong><strong>Coffee</strong>:</p>
7
<p>Ну а теперь мы уже можем готовить<strong><em>разный</em></strong><strong>Coffee</strong>:</p>
8
<p>Вот и все. Если интересует, вот пример реализации на Java:<em>https://github.com/iluwatar/java-design-patterns/tree/master/decorator</em>.</p>
8
<p>Вот и все. Если интересует, вот пример реализации на Java:<em>https://github.com/iluwatar/java-design-patterns/tree/master/decorator</em>.</p>
9
<p><em>По материалам https://github.com/kamranahmedse/design-patterns-for-humans.</em></p>
9
<p><em>По материалам https://github.com/kamranahmedse/design-patterns-for-humans.</em></p>
10
10