O objetivo é resolver a maior quantidade de problemas usando padrões de projeto. Em todas as questões apresentar o código usando o padrão e um exemplo de uso. Verifique o arquivo README de cada questão para maiores detalhes.
Aplicar o padrão strategy a fim de permitir acrescentar outros validadores
Aplicar o padrão Singleton para permitir acessar o mecanismo de log de qualquer ponto do programa
Aplicar o padrão Decorator para permitir acrescentar diferentes niveis de log.
Aplicar o padrão observer de maneira a tornar mais simples o acrescimo de novos visualizadores e/ou a ativação/desativação deles.
Aplicar o padrão Composite de maneira que seja possível criar ofertas que correspondem a kits de produtos.
Aplicar o padrão decorator sobre um dado simples.