Padroes de projeto
Introdução
O padrão de projeto (Design Pattern) Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes.
Em algumas situações precisamos adicionar responsabilidades à objetos individuais, e não a toda a classe. O padrão de projeto Decorator resolve o problema, permitindo que tais responsabilidades sejam adicionadas individualmente. Para ilustrar o problema, imaginemos um website que auxilia a montagem de veículos pelo cliente, poderíamos então adicionar novos produtos aos veículos, como ar condicionado, vidro elétrico, travas elétricas e direção hidráulica, alterando assim as características finais.
Imagine como ficaria a resolução do problema proposto sem a utilização do padrão de projeto Decorator, utilizando apenas herança estática (múltipla). Poderia ser escrito subclasses de Carro com os produtos desejados, como por exemplo CarroXComArCondicionado, CarroYComTravasEletricas, CarroYComTravasEDireção, o que levaria a uma “explosão de classes”, tornando esta solução totalmente inviável. Outra solução poderia ser a utilização de variáveis booleanas que representassem cada produto, isso traria vários problemas de manutenção e flexibilidade de código, como por exemplo alterar a superclasse quando fosse adicionado novos produtos.
O Padrão de Projeto Decorator
Além da característica principal do padrão de projeto Decorator que é adicionar novas responsabilidades dinamicamente, há também outras características importantes que devem ser levadas em consideração.
A utilização do padrão permite uma maior flexibilidade e facilidade de manutenção de código. Novos produtos/decoradores podem ser facilmente adicionados na