Шаблон декоратора предназначен для добавления дополнительного поведения к оформленному классу без необходимости настройки клиента.Таким образом, он не предназначен для добавления нового интерфейса (например, hotness
, cheese
) к декорируемой вещи.
Несколько плохой пример того, для чего он может быть использован, где вы хотите изменитьsize
рассчитывается: вы можете создать MetricSizePizzaDecorator
, который преобразует размер в / из английских / метрических единиц.Клиент не знал бы, что пицца была украшена - он просто вызывает getSize()
и делает все, что нужно с результатом (например, для расчета цены).
Я бы, вероятно, не использовал декораторв моем примере, но дело в том, что это не меняет интерфейс.Фактически, почти все шаблоны проектирования сводятся к этому - добавление изменчивости в дизайн без изменения интерфейсов.