Artigo Java Magazine 42 - Aplicando Design Patterns
Utilize bibliotecas open source e design patterns para construir um visualizador de arquivos, e aprenda ao mesmo tempo melhores práticas de programação e APIs úteis do Java SE.
Entendendo o contexto
Como sabemos, os design patterns (padrões de projeto) descrevem soluções para problemas recorrentes. Seu uso normalmente torna a aplicação mais elegante e mais fácil de manter. Os patterns também definem uma terminologia comum para uso pelos profissionais envolvidos no projeto, facilitando assim a compreensão do código que os utiliza.
A literatura sobre padrões de projeto é extremamente ampla [1], mas muitos desenvolvedores ainda têm dúvida na maneira de aplicar alguns patterns menos comuns. Ainda que exista um forte movimento a favor do uso de patterns, alguns programadores têm pouco contato com outros além dos “Java EE patterns” ou os implementados pelos frameworks web (Command, Singleton, Factory etc).
Neste artigo usaremos dois patterns de ampla utilidade que são usados nas APIs do Java e em vários frameworks e bibliotecas: Template Method e Chain of Responsibility. Embora seu uso seja menos comum que o dos padrões citados anteriormente [2], você verá que esses patterns trazem uma série de benefícios importantes.
Entendendo a ferramenta
Nosso interesse é construir uma ferramenta de visualização de arquivos. Apesar de o Java oferecer suporte nativo à visualização e à manipulação de arquivos-texto e imagens, um visualizador que incorpore realce de sintaxe, ou que permita exibir arquivos complexos, exige codificação adicional. Nosso desafio é construir um visualizador genérico, que permita exibir diversos formatos de arquivo (com realce de sintaxe, quando aplicável) e que seja extensível, permitindo que no futuro outros formatos sejam incorporados.
As Figuras 1 à 6 mostram o funcionamento do nosso visualizador, que permite mostrar nove tipos arquivos (html, jpg, gif, png, java, pdf, rtf, txt e xml). A utilização é simples: basta arrastar um ou mais arquivos sobre a tela e uma aba será criada para cada um. Cada aba incorpora um componente visual específico, responsável pela renderização do arquivo em questão.