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…

Interface

Classe de Exception auxiliar…

Exception

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…

1
2
3
4
5

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…

EquipeListHandler

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:

Business

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:

jsp

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…

ListFactory

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