Образец Декоратора - Многократные обертки или количественное свойство? - PullRequest
1 голос
/ 27 декабря 2010

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

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

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

1 Ответ

1 голос
/ 27 декабря 2010

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

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

...