JavaScriptPOOintermediario

Padrão Decorator com classes

Em sistemas de e-commerce ou cardápios digitais, itens como café, pizza ou hambúrguer têm variações que alteram preço e descrição sem modificar a base. Usar herança direta para cada combinação gera uma explosão de classes. O padrão Decorator resolve isso ao permitir empilhar ingredientes dinamicamente, mantendo o código flexível e extensível.

O PROBLEMA

Implemente sistema de café com Decorator: Cafe, ComLeite, ComAcucar, ComChantilly. Encadeáveis.

EXEMPLO

const cafe = new ComChantilly(new ComLeite(new Cafe()));
cafe.descricao() → "Café, Leite, Chantilly"
cafe.preco() → R$8.50

SOBRE O CONCEITO

O Decorator pattern é um padrão estrutural que permite adicionar responsabilidades a um objeto sem alterar sua classe. Neste exercício, cada decorador (como ComLeite) recebe uma instância de Cafe (ou outro decorador) via construtor, chama super() para delegar e estende o comportamento nos métodos descricao() e preco(). O erro comum é não encadear os decoradores: ao criar new ComLeite(new Cafe()), o decorador deve armazenar o objeto base (com this.cafe = cafe ou via super(cafe) se herdando de Cafe). Outro erro é o preço não acumular: no método preco(), é preciso somar o preço do componente base (obtido com super.preco() ou método do objeto armazenado) com o adicional. Se isso não for feito, ao chamar preco() num decorador aninhado, o valor retornado será apenas o do decorador mais externo.

RESOLUÇÃO

Mais exercícios de POO

JSP021 · AvançadoClasse LinkedListJSP005 · BásicoContador de instânciasJSP008 · Básicoinstanceof e verificação de tipoJSP009 · BásicoClasse abstrata simulada
Ver todos os exercícios de JavaScript