Li num site que o padrão Chain of Responsability, espera que somente um objeto na cadeia, manipule uma requisição, por exemplo.
Qual o padrão parecido com este, onde eu desejo que “n” objetos que implementam uma interface comum, processem a mesma requisição ?
Preciso implementar um tipo de cadeia de filtro, onde existe um objeto para ser processado por “n” filtros diferentes, cada um alterando ou não o conteúdo do objeto recebido e finalmente este objeto “transformado”, vai ser passado para outro que vai usá-lo, e não vai saber destas transformações, ou seja, independente de haver filtros ativos ou não, ele sabe manipular o objeto recebido.
Eu tava vendo servelet filter e é isto que eu queria implementar…
Quero pegar o fonte dos arquivos FilterChain.java e Filter.java.
Eles estão no J2EE SDK ou em soft tipo o Tomcat ?
Quero adaptar elas para as minhas necessidades, pois pretendo ter filtros processando conteúdo que vem de um HttpConnection.
Na verdade uma classe seria a FilterManager que registro os filtros, a Filter que é a interface, e outras classes seriam propriamente a implementação do filtro.
Penso por enquanto em ter um filtro que comprime o stream e outro filtro que encrypta.
Alguma sugestão para isto e onde encontro o fonte dos arquivos acima?
Cara, nao reinvente a roda… busque por aih uma implementacao de CoR (que é isso mesmo que vc quer) pronta…
Se vc olhar o Webwork, ou qq implementacao de Method Advices de AOP (pode olhar no Nanning), c vai sacar a essencia e poder fazer vc mesmo.
Mas a idéia básica é assim… se vc quer que o próprio filtro seja responsável pelo gerenciamento da cadeia (stack-style), vc pode ter uma interface do tipo:
public interface Filter {
public void doFilter() throws FilterException;
public void invokeNext() throws FilterException;
}
public abstract class AbstractFilter implements Filter {
public final void setNext(Filter f) {...}
public void invokeNext() throws FilterException {...}
}
Bom, vc tem que obrigar o implementador a chamar o invokeNext() no fim do doFilter(). Isso é bom quando vc tem uma chain que nao necessariamente chega até o fim.
tem outros esquemas, do tipo voltar um código. As Actions do WebWork retornam um String que é usado pra determinar a próxima acao no chain.
Se vc tiver direitinho o que vc quer na cabeca, nao vai ser difícil a solucao brotar do próprio problema.