Шаблон "декоратор": Почему нам нужен абстрактный декоратор? [дубликат]

Этот вопрос уже имеет ответ здесь:

Этот вопрос уже задали здесь, а скорее, чем ответ на конкретный вопрос, описания того, как работы шаблона "декоратор" были даны вместо этого. Я хотел бы спросить это снова, потому что ответ не сразу очевиден для меня только путем чтения, как шаблон "декоратор" работает (я прочитал статью Википедии и раздел в книжном Заголовке Первые Шаблоны разработки).

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

Для создания этого более конкретным, я буду использовать пример из книги шаблонов разработки, имеющей дело с кофейными напитками:

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

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

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

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

32
задан Piotr Góralczyk 27 August 2019 в 22:08
поделиться

1 ответ

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

2
ответ дан 27 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: