Obaľuje objekt vrstvami, ktoré mu pridávajú chovanie bez dedenia.
class Beverage { description() { throw new Error('abstraktná metóda'); }} class Espresso extends Beverage { description() { return 'espresso'; }} class CondimentDecorator extends Beverage { constructor(beverage) { super(); this.beverage = beverage; }} class Milk extends CondimentDecorator { description() { return this.beverage.description() + ', mlieko'; }} class Sugar extends CondimentDecorator { description() { return this.beverage.description() + ', cukor'; }} // Tri triedy, štyri nápoje — stačí ich poskladať inak.new Espresso().description(); // 'espresso'new Sugar(new Espresso()).description(); // 'espresso, cukor'new Milk(new Espresso()).description(); // 'espresso, mlieko'new Sugar(new Milk(new Espresso())).description(); // 'espresso, mlieko, cukor'