2010-12-26 4 views
1

Я использую шаблон декоратора для одного из первых случаев, как часть проекта Uni. Насколько я вижу, шаблон, похоже, больше подходит для добавления функциональности модульным способом, однако нас научили этому с использованием таких технологий, как кофе или производитель пиццы, где объект имеет добавленные модульные компоненты - изменение свойства, а не поведение.Decorator Pattern - Несколько оберток или свойство количества?

Я стараюсь максимально использовать оба варианта использования, однако у меня возник вопрос. В примере в книге, которую мы используем (Head First Design Patterns), шаблон используется в кафе, создающем разные сорта кофе. Так, например, молоко, пена, сахар, брызги - все декораторы.

Как бы вы использовали систему, которая использовала один и тот же декоратор несколько раз (например, кофе с двумя сахарами)? Не могли бы вы переложить кофе или дать сахара количество собственности? Или (как я начинаю подозревать) это никогда не будет проблемой, поскольку шаблон не предназначен для использования таким образом?

+0

Я хотел бы добавить количество цветов в декоратор, но идея применения одного и того же Decorator несколько раз интригует. Вы можете попробовать в обоих направлениях и посмотреть, что вам больше нравится. –

ответ

1

Декоратор не заботится о том, как украшен данный объект уже есть. Ни декоратор, ни данный объект не хранят никакой информации об этом. По сути, вы хотите изменить поведение/состояние декоратора, так что это нужно сделать изнутри декоратора.

Итак, укажите Sugar a quantity. Вы можете сделать это, добавив новый конструктор с дополнительным аргументом (и пусть стандартный конструктор по умолчанию quantity - 1 и задокументирует его).

+0

Спасибо. Я склонялся к этому, поскольку альтернатива потребует больше работы, но я начал думать, что я не использую его, как предполагалось. – Jim

Смежные вопросы