Carrrrrrw ggaaewer
511 palavras
3 páginas
DecoratorIntenção:
Dinamicamente, agregar responsabilidades adicionais a um objeto. Os Decorators fornecem uma alternativa flexível ao uso de subclasses para extensão de funcionalidades.
Motivação:
Algumas vezes queremos acrescentar responsabilidades a objetos individuais, e não a toda uma classe. Por exemplo, um toolkit para construção de interfaces gráficas de usuário deveria permitir a adição de propriedades, como bordas, ou comportamentos, como rolamento, para qualquer componente da interface do usuário.
Uma forma de adicionar responsabilidade é a herança. Herdar uma borda de outra classe coloca uma borda em volta de todas as instancias de uma subclasse. Contudo, essa abordagem é inflexível, porque a escolha da borda é feita estaticamente. Um cliente não pode controlar como e quando decorar o componente com uma borda.
Uma abordagem mais flexível é embutir o componente em outro objeto que acrescenta a borda. O objeto que envolve o primeiro é chamado de decorator. O decorator segue a interface do componente que decora, de modo que sai presença é transparente para os clientes do componente. O decorator repassa solicitações para o componente, podendo executar ações adicionais (tais como desenhar uma borda) antes ou depois do repasse. A transparência permite encaixar decoradores recursivamente, desta forma permitindo um número ilimitado de responsabilidades adicionais.
Suponha que tenhamos um objeto TextView que exibe texto numa janela. Como padrão, TextView não tem barras de rolamento porque nem sempre necessitamos.
Quando as necessitarmos, poderemos usar um ScrollDecorator para acrescentá-las.
Supnha , também, que queiramos acrescentar uma borda preta espessa ao redor do objeto TextView. Também podemos usar um objeto TextView com objetos Border Decorator para essa finalidade. Simplesmente compomos os decoradores como TextView para produziro resultado desejado.
O diagrama de objetos abaixo mostra como compor um objetoTextView com objetos