Esse artigo faz parte da revista SQL Magazine edição 48. Clique aqui para ler todos os artigos desta edição

AN> 

Projeto

Decorando objetos

 

No artigo anterior - Objetos também são hospitaleiros - desenvolvemos um renderizador de provas para a empresa ABC. Para cada renderizador criamos um objeto que visitava todos os elementos da estrutura da prova acumulando conhecimentos. O visitante acrescia regras de negócio e comportamentos aos objetos visitados dinamicamente e o melhor, sem que o visitado precisasse ser alterado. Para tornar isso possível foi necessário abordarmos alguns princípios de orientação a objetos e o padrão Visitor. Vale apena conferir.

Nesse artigo daremos continuidade à série de padrões de projetos. Dessa vez vamos aprender técnicas de decoração de objetos.

É importante ressaltar que embora estejamos utilizando Java para exemplificar códigos, essas técnicas são extensíveis a quase todas as linguagens orientadas a objetos.

Será considerado que o leitor possui alguma noção de orientação a objetos, Java e HTML.

Utilizaremos um exemplo didático para demonstrar o funcionamento das técnicas de decoração, mas esse exemplo, apesar da sua simplicidade, é poderoso e poderá ser entendido e melhorado para uso em sistemas reais.

O problema

Recebemos uma encomenda especial do nosso cliente. A Design W3 precisa gerar páginas HTML respeitando dois requisitos abrangentes: simplicidade e flexibilidade. A simplicidade se refere à criação e manutenção dessas páginas HTML. A flexibilidade se refere à criação e manutenção dos componentes (elementos da página, tais botões, labels, textos, dentre outros).

A solução

Vamos partir da seguinte idéia, precisamos criar componentes em Java que representem os componentes HTML. Para simplificar vamos criar somente as seguintes classes: Button, CheckBox, Div e Fieldset. Como todas essas classes são componentes, criaremos uma classe genérica que as representem, conforme mostra a Listagem 1.

 

Listagem 1. Implementação da classe Componente

public abstract class Componente {

 

public abstract String getHTML();

        

         public String toString() {

                   return getHTML();

         }

}

 

A classe da Listagem 1 tem como propósito generalizar nosso conceito de componente, ou seja, classes como Button, Checkbox e outras deverão herdar de Componente que, por sua vez, possui apenas um método abstrato, o getHTML(). Esse método é o serviço que gera o HTML de um componente específico, por isso ele precisa ser implementado na subclasse, pois somente ela sabe como se desenhar.

O método toString() foi sobrecarregado de modo a retornar o HTML do componente. ...

Quer ler esse conteúdo completo? Tenha acesso completo