Вопрос о шаблоне декоратора и классе абстрактного декоратора? [Дубликат]

На этот вопрос уже есть ответ здесь:

Зачем нам нужен декоратор в шаблоне оформления декоратора? 4 ответа

Этот вопрос уже задавалсяВотВместо того, чтобы отвечать на конкретный вопрос, вместо этого были даны описания того, как работает шаблон декоратора. Я'Я хотел бы задать его еще раз, потому что ответ не сразу очевиден для меня, просто читая, как работает шаблон декоратора (яПрочитайте статью в Википедии и раздел в книге «Head First Design Patterns».

По сути, я хочу знать, почему должен быть создан абстрактный класс декоратора, который реализует (или расширяет) некоторый интерфейс (или абстрактный класс). Почему можнот все новое "декорированные занятия " просто реализовать (или расширить) базовый абстрактный объект самостоятельно (вместо расширения абстрактного класса декоратора)?

Чтобы сделать это более конкретным, яВоспользуемся примером из книги «Шаблоны дизайна», посвященной кофейным напиткам:

Существует класс абстрактных компонентов, который называетсяBeverageПростые типы напитков, такие какHouseBlend просто расширитьBeverageДля украшения напитка, аннотацияCondimentDecorator класс создан, который расширяетсяBeverage и имеет экземплярBeverageСкажем, мы хотим добавить "молоко" приправа, классMilk создан, который расширяет яCondimentDecorator

хотелось бы понять, почему мы нуждались вCondimentDecorator класс и почему классMilk не мог»т просто продлилBeverage сам класс и был передан экземплярBeverage в своем конструкторе.

Надеюсь, это понятно ...если не япросто хотел бы знатьпочему абстрактный класс декоратора необходим для этого шаблона? Благодарю.

Изменить: я пытался реализовать это, опуская класс абстрактного декоратора, и этокажется все еще работать. Этот абстрактный класс присутствует во всех описаниях этого шаблона просто потому, что он обеспечивает стандартный интерфейс для всех новых оформленных классов?

Ответы на вопрос(9)

Ваш ответ на вопрос