Obs: Esse projeto é um exemplo de implementação do padrão Decorator em um sistema baseado em uma cafeteria. Foi desenvolvido durante a disciplina de Projeto Orientado a Objeto na Universidade Federal de São Paulo (UNIFESP - SJC).
Uma cafeteria deseja desenvolver um sistema para montagem de bebidas personalizadas. O cliente pode pedir uma bebida base, como café expresso, cappuccino ou chá, e adicionar complementos como leite, chantilly, canela e calda de chocolate. Como diferentes combinações são possíveis, criar uma classe para cada variação tornaria o sistema rígido e difícil de manter.
Implementar uma solução orientada a objetos que:
- utilize o padrão Decorator para adicionar responsabilidades dinamicamente;
- permita combinar múltiplos adicionais sem alterar as classes base;
- calcule corretamente a descrição final e seu custo total;
- demonstre flexibilidade e extensibilidade na composição.
"O cliente deve poder montar bebidas personalizadas de forma dinâmica, combinando adicionais em tempo de execução, sem explosão no número de classes."
IBeverage: Interface que define o contrato para as bebidas.Espresso,Cappuccino,Tea: Classes concretas que implementamIBeveragee representam as bebidas base.BeverageDecorator: Classe abstrata que implementaIBeveragee serve como base para os decoradores.Milk,WhippedCream,Chocolate: Decoradores concretos que estendemBeverageDecoratore adicionam funcionalidades específicas.Program: Classe principal para demonstrar a montagem de bebidas personalizadas.