Pertencente à família de padrões estruturais do conjunto de padrões de projeto GoF, o Decorator, ou Wrapper, tem como finalidade agregar comportamentos a objetos existentes em tempo de execução. Portanto, pode-se utilizar também a definição de que o Decorator agrega responsabilidades adicionais a um objeto dinamicamente, oferecendo uma alternativa flexível ao uso de herança para extender uma funcionalidade.
Intenção
· Acrescentar responsabilidades a um objeto dinamicamente
· Prover alternativa flexível ao uso de subclasses para se estender a funcionalidade de uma classe
· Acrescentar responsabilidades a um objeto dinamicamente
· Prover alternativa flexível ao uso de subclasses para se estender a funcionalidade de uma classe
Motivação
· Objeto usado possui as funcionalidades básicas, mas é necessários adicionar funcionalidades adicionais a ele que podem ocorrer antes ou depois da funcionalidade básica.
· Funcionalidades devem ser adicionadas em instancias individuais e não na classe.
· Objeto usado possui as funcionalidades básicas, mas é necessários adicionar funcionalidades adicionais a ele que podem ocorrer antes ou depois da funcionalidade básica.
· Funcionalidades devem ser adicionadas em instancias individuais e não na classe.
Consequencias
· Mais flexibilidade do que herança
o Adição ou remoção de responsabilidades em tempo de execução
o Adição da mesma propriedade mais de uma vez
· Evita o excesso de funcionalidades nas classes.
· Decorator e seu componente não são idênticos.
o Comparações tornam-se mais complexas
· Resulta em um design que tem vários pequenos objetos, todos parecidos
· Mais flexibilidade do que herança
o Adição ou remoção de responsabilidades em tempo de execução
o Adição da mesma propriedade mais de uma vez
· Evita o excesso de funcionalidades nas classes.
· Decorator e seu componente não são idênticos.
o Comparações tornam-se mais complexas
· Resulta em um design que tem vários pequenos objetos, todos parecidos
Aplicabilidade
· Acrescentar ou remover responsabilidades a objetos individuais dinamicamente, de forma transparente
· Evitar a explosão de subclasses para prover todas as combinações de responsabilidades
· Acrescentar ou remover responsabilidades a objetos individuais dinamicamente, de forma transparente
· Evitar a explosão de subclasses para prover todas as combinações de responsabilidades
Implementação
Outro Exemplo
1. // a caixa de texto é o componente "decorado"
2.
JTextArea txt = new JTextArea();
3.
4. // "decora" a caixa de texto com barras de rolagem
5.
Component comp = new JScrollPane(txt);
6.
7. // adiciona o componente com barras de rolagem no form
8.
getContentPane().add(comp);
Referencias:
SILVA, V. T. Padrões de Design. Wikipedia.org. Acessado em 2012
Postado por: Hélio Marcus Torres de Arêa Leão
Nenhum comentário:
Postar um comentário