Pattern Decorator
Definição:
Decorator é um design pattern para composição em tempo de execução, dessa forma você pode trazer novas funcionalidades através da escrita de novos códigos, sem alterar os códigos que já foram escritos, assim sendo respeita-se a “regra” do aberto para extensão, fechado pra modificação. Para a utilização do pattern decorator é necessário que as classes que vão decorar um objeto tenham o mesmo tipo básico da classe que vai ser decorada.
Alguns pontos positivos do pattern decorator:
• Adiciona funcionalidade a um objeto e não a classe;
• Pode usar mais de um decorator pra decorar um objeto;
• O decorator adiciona o seu próprio comportamento;
• O objeto é decorado em tempo de execução.
O pattern decorator também tem alguns pontos “negativos”:
• Não se aplica quando o cliente precisa de um tipo concreto do objeto, essa informação é escondida pelo decorator;
• Aumenta o numero de classes a serem gerenciadas
• Muitas classes podem tornar o código confuso
Situação problema:
A vodka é uma bebida que pode ser misturada com muitas outras coisas para a criação de drinks. Precisa-se de uma classe que faça o calculo de drinks que tenham como substancia principal a vodka e que possa ser alterada em tempo de execução.
Solução através do decorator
Através do pattern decorator nós instanciamos uma classe concreta vodka e de acordo com o drink que for criado vamos decorando-a com as classes decorator, que implementam a mesma interface. Desse modo de acordo com a especificação do drink vai somando o valor de cada elemento(método getPrice()) no preço e a descrição(método getDescription()) na descrição do produto.
Diagrama de classes
Definição:
Decorator é um design pattern para composição em tempo de execução, dessa forma você pode trazer novas funcionalidades através da escrita de novos códigos, sem alterar os códigos que já foram escritos, assim sendo respeita-se a “regra” do aberto para extensão, fechado pra modificação. Para a utilização do pattern decorator é necessário que as classes que vão decorar um objeto tenham o mesmo tipo básico da classe que vai ser decorada.
Alguns pontos positivos do pattern decorator:
• Adiciona funcionalidade a um objeto e não a classe;
• Pode usar mais de um decorator pra decorar um objeto;
• O decorator adiciona o seu próprio comportamento;
• O objeto é decorado em tempo de execução.
O pattern decorator também tem alguns pontos “negativos”:
• Não se aplica quando o cliente precisa de um tipo concreto do objeto, essa informação é escondida pelo decorator;
• Aumenta o numero de classes a serem gerenciadas
• Muitas classes podem tornar o código confuso
Situação problema:
A vodka é uma bebida que pode ser misturada com muitas outras coisas para a criação de drinks. Precisa-se de uma classe que faça o calculo de drinks que tenham como substancia principal a vodka e que possa ser alterada em tempo de execução.
Solução através do decorator
Através do pattern decorator nós instanciamos uma classe concreta vodka e de acordo com o drink que for criado vamos decorando-a com as classes decorator, que implementam a mesma interface. Desse modo de acordo com a especificação do drink vai somando o valor de cada elemento(método getPrice()) no preço e a descrição(método getDescription()) na descrição do produto.
Diagrama de classes





