Padrões de projeto de software
Categories: Design Patterns
-
Uma dificuldade que tenho, e acredito que muitos tem, é de encontrar códigos simples implementados com conceitos de padrões de projeto de desenvolvimento de software, por isso postarei aqui toda semana um exemplo de como implementei algo nesse contexto, de forma que venha ajudar a quem está iniciando no aprendizado e para aqueles que já implementaram podendo contribuir com melhorias no conceito ou sugestões.
Não quero me alongar em histórico de design patterns ou forma técnica de demonstrar um pattern, explicando contexto, problema, solução, etc. Para isso aconselho aos livros clássicos sobre o assunto ou pesquisas em portais que tratam os patterns dessa forma. Vou direto para a dica de implementação com apenas um pequeno descritivo da necessidade de tal padrão.
Necessidade
Para esse artigo inicial vou demonstrar como solucionei uma necessidade de paginação de forma reaproveitavél utilizando os fundamentos da programação orientada a objetos.
O exemplo está utilizando JAVA como linguagem mas pode muito bem ser utilizada em outras linguagens orientadas a objetos.
Padrões
Para solucionar essa necessidade utilizei o Pattern Iterator e o Template Method.
Implementação
Primeiro criei uma Interface onde defini quais métodos seriam implentados para essa necessidade.
Código…
Classe de Exception auxiliar…
Então criei uma classe Abstrata que implementa métodos comuns a todas as classes concretas que venham a extendê-la. Um detalhe é que utilizei o conceito de Template Method e deixei alguns métodos a serem implamentados na classe concreta, dessa forma controlo o funcionamento interno de navegação da paginação e deixo aberto para extensão de especificidades da aplicação do programador.
Códigos da classe abstrata…
Observe que não implementei os métodos:
public String getCmd();
public void setCmd(String cmd);
public Collection getGrid();
deixando a cargo do programador implementá-los.
Não pretendo me ater sobre as funcionalidades de cada método, devo apenas ressaltar que o inteiro cache é relativo ao número de elementos da lista por página.
Utilização
Vejamos como utilizar essa estrutura:
Vamos criar uma classe que seja uma lista de objetos a serem percorridos na paginação.
Essa classe terá que implementar nossa Interface e estender a classe abstrata.
Código da classe…
Vejam que tive que implementar os métodos que a classe abstrata não fez por conta da obrigatoriedade que a Interface causa por implementá-la. Criei um construtor que recebe uma lista de valores e o número de elementos que aparecem em cada página.
Voce instancia em seu controle da seguinte forma:
Esse código é apenas um exemplo de como utilizar a estrutura, existem mais possibilidades.
Na página jsp eu poderia acessá-lo da seguinte forma:
Utilizo uma variação na criação do Manipulador (Handler), usando uma fábrica para encontrar a classe exata.
Exemplo…
ValueListIterator equipeHandler = ListFactory.getListIterator(”Equipe”);
equipeHandler.setTamanhoCache(10);
equipeHandler.setList(…);
Depois testo se o objeto já está instanciado e se estiver seto o comando especifico.
equipeHandler.setCmd(acao);
Código da Fabrica…
Espero não ter complicado por falta de explicações maiores, mas eu queria somente demonstrar como utilizei determinados Padrões na resolução de uma necessidade específica.
Referências
http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html
http://java.sun.com/blueprints/corej2eepatterns/Patterns/ValueListHandler.html
http://www.corej2eepatterns.com/catalog.htm
http://www.corej2eepatterns.com/Patterns2ndEd/ValueListHandler.htm
http://www.javamagazine.com.br/edicoes/jm21/index.jsp
http://www.javamagazine.com.br/edicoes/jm20/index.jsp
Excelente, de onde retirei grande parte do conceito.
http://www.mundooo.com.br/php/modules.php?name=News&file=article&sid=512
Download do código do artigo
http://www.amigos-list.org/~cmilfont/source/src_pattern_1.zip



November 2nd, 2005 at 6:31 am
Excelente iniciativa,
eu achei a organização da página um pouco confusa, mas com potencial de se tornar uma boa fonte de referência.
talvez seja bom linkar a tua página lá na comunidade de padrões: http://community.java.net/patterns/
parabéns pela iniciativa,
Felipe Gaúcho
November 3rd, 2005 at 7:13 am
Eu particulamente achei uma droga, espero da próxima ves deixar mais claro o artigo, como esse é o primeiro espero um melhor na próxima semana.
November 3rd, 2005 at 7:18 am
Eu achei muito boa a iniciativa do Milfontes :D.
Agora é só esperar a próxima edição neh.
E esperar tbm um projeto Open Source pra galera poder estudar, melhorar e usar esse novo frameworks.
E ai vai ter esse projeto ?
November 3rd, 2005 at 7:22 am
Errata.
Na página JSP, ficou faltando as tags de inicio e fim da tabela, e .
No código de controle onde será instanciado a classe concreta faltou declarar o tipo String para a variável acao.
O codigo de controle está com marcação vermelha em trechos do códigos porque criei o código para esse artigo baseado em sistemas que tenho aqui e não importei as coisas devidas, típico de amador e marinheiro de primeira viagem :D, perdoem-me por essa falha, nos proximos se eu sobreviver até lá devido as reclamações prometo compilar tudo direitinho.
Pronto Handerson, expliquei pra todo mundo :d
November 3rd, 2005 at 7:25 am
Cada novo artigo , vou utilizando os conceitos do anterior e montando uma aplicação completa, espero. No próximo que vou falar sobre DAO, vou criar um código que monta uma tela de paginação usando os conceitos desse integrados com o novo artigo. Até lá.
November 4th, 2005 at 5:20 am
Bom dia meu irmão, como vão as coisas? espero que esteja tudo certinho , estou passando aqui para parabenizá-lo por mais uma vez a inovação no blog, o blog que já continha ótimos textos , agora ficou melhor ainda adicionando matérias técnicas..
November 4th, 2005 at 7:52 am
Esqueci de uma referencia no artigo.
http://java.sun.com/blueprints/patterns/ValueListHandler.html