class CupCake {
  constructor(flavour, color) {
    this.flavour = flavour;
    this.color = color;
    this.cost = 3;
  }
}

//decorator 1
const addSprinkles = function(cupcake) {
  const cost = cupcake.cost + 1;
  return {...cupcake, hasSprinkles: true, cost};
}

//decorator 2
const addSkittles = function(cupcake) {
    const cost = cupcake.cost + 2;
    return {...cupcake, hasSprinkles: true, cost};
}


const vanilla = new CupCake('vanilla', 'blue');
const sprinkledVanilla = addSprinkles(vanilla);
const skittleVanilla = addSkittles(vanilla);
const fullDecoratedVanilla = addSkittles(sprinkledVanilla); //A combination of both sprinke decorator and skittle decorator.
console.log(vanilla.cost); //3
console.log(sprinkledVanilla.cost); //4
console.log(skittleVanilla.cost); //5
console.log(fullDecoratedVanilla.cost); //5