sexta-feira, 9 de março de 2012

Design Patterns: Decorator

O Design Pattern Decorator tem como objetivo acrescentar responsabilidades a um objeto de forma dinâmica (em runtime), de forma mais flexível do que seria feito utilizando herança. O decorator permite que sejam criados vários comportamentos “adicionais” para um objeto e que eles sejam combinados conforme a necessidade da aplicação.

A descrição formal do Decorator é a seguinte: Anexa responsabilidades adicionais a um objeto dinamicamente. Decorators fornecem uma alternativa flexìvel à herança para extender as funcionalidades de um objeto.

Um exemplo clássico é a programação de janelas em aplicativos de interface gráfica. Imagine a janela como um objeto básico, nele os demais elementos gráficos são adicionados conforme a necessidade: barra de rolagem vertical, barra de rolagem horizontal, barras de menus, botões de maximizar, minimizar, etc. Cada um destes elementos gráficos seria uma “decoração” adicionada à janela, podendo ser combinados de acordo com a necessidade.

Um exemplo também comum e mais elucidativo é o sistema da cafeteria. Existem muitos tipos de café, combinandodiferentes ingredientes o preço do café muda. Em vez de criarmos uma nova classe para cada tipo de café, podemos usar o decorator para que, com um pequeno conjunto de classes, possamos representar todos os tipos de café servidos.

Baixe o código-fonte do exemplo (requer Visual Studio 2010).

Com este exemplo, podemos entender como os decorators estendem a funcionalidade básica da classe Café, e como todos eles implementam uma mesma interface, podem ser escolhidos e atribuídos em runtime, ou seja, dinamicamente.

Clique aqui para voltar à Intradução aos Design Patterns, com a lista de todos os Patterns apresentados.

Nenhum comentário: