Рубрики

Образец Декоратора | Комплект 2 (Введение и дизайн)

Как мы видели, наши предыдущие проекты, использующие наследование, не сработали так хорошо. В этой статье шаблон декоратора обсуждается для задачи проектирования в предыдущем наборе.

Итак, что мы делаем сейчас, это возьмите пиццу и «украсим» ее начинками во время выполнения:

  1. Возьмите объект для пиццы.


  1. «Украсьте» его объектом «Стручковый перец».

  1. «Украсьте» его объектом CheeseBurst.
  2. Вызовите getCost () и используйте делегирование вместо наследования для расчета стоимости начинки.

В итоге мы получаем пиццу с начинкой из чизберса и паприки. Визуализируйте объекты «декоратор» как обертки. Вот некоторые свойства декораторов:

  • Декораторы имеют тот же супер тип, что и объект, который они украшают.
  • Вы можете использовать несколько декораторов, чтобы обернуть объект.
  • Поскольку декораторы имеют тот же тип, что и объект, мы можем передавать декорированный объект вместо оригинального.
  • Мы можем украсить объекты во время выполнения.

Определение:

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

Диаграмма классов:

Источник изображения: Википедия

  • Каждый компонент может использоваться сам по себе или может быть упакован декоратором.
  • Каждый декоратор имеет переменную экземпляра, которая содержит ссылку на компонент, который он декорирует (отношение HAS-A).
  • ConcreteComponent — это объект, который мы собираемся динамически декорировать.

Преимущества:

  • Шаблон декоратора может использоваться, чтобы сделать возможным расширить (украсить) функциональность определенного объекта во время выполнения .
  • Шаблон декоратора является альтернативой подклассам. Подклассы добавляют поведение во время компиляции, и изменение влияет на все экземпляры исходного класса; Декорирование может обеспечить новое поведение во время выполнения для отдельных объектов.
  • Декоратор предлагает платный подход к добавлению обязанностей. Вместо того, чтобы пытаться поддерживать все предполагаемые функции в сложном, настраиваемом классе, вы можете определить простой класс и постепенно добавлять функциональные возможности с объектами Decorator.

Недостатки:

  • Декораторы могут усложнить процесс создания экземпляра компонента, поскольку вам нужно не только создать экземпляр компонента, но и заключить его в несколько декораторов.
  • Может быть сложно заставить декораторы следить за другими декораторами, потому что оглядываясь назад на несколько слоев цепочки декораторов, начинает выталкивать шаблон декоратора за пределы его истинного намерения.

Ссылки:

В следующем посте мы будем обсуждать реализацию шаблона декоратора.

Эта статья предоставлена Сулабх Кумар . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Образец Декоратора | Комплект 2 (Введение и дизайн)

0.00 (0%) 0 votes