Filter Design Pattern Definição Filter é um padrão de projeto utilizado para análise e tratamento de dados. Com esse padrão é possível utilizar um ou mais objetos (filtros) que tratam ou operam um fluxo de dados de maneira específica, a fim de obter soluções genéricas (reutilizáveis). Padrões Relacionados Possui alguns padrões relacionados: Decorator; Composite; Pipe; Contexto Análise simples de fluxo de dados podem ser comum a vários programas. Uma maneira de conseguir flexibilidade é definir uma superclasse (Filter) genérica para Instanciar os objetos das subclasses. Solução Através de uma combinação de classes abstratas e delegação, uma solução é realizada. O padrão Filter organiza as classes que dele participam como fonte de dados, sink(consumidores) de dados e filtros de dados. As classes de dados do Filter executam as operações de transformação e análise. Formas Básicas Os fluxos de dados acontecendo quando um filtro pega os dados de um outro objeto fonte. Participantes AbstractSource Esta classe abstrata declara um método, indicado no diagrama como getData, que retorna os dados quando é chamado. ConcreteSource corresponde a qualquer subclasse concreta de AbstractSource que é o principal responsável pelo fornecimento de dados ao invés de transformar ou análisar dados. Participantes AbstractSourceFilter Superclasse das classes que transformam e analisam dados. Ela tem um construtor que recebe um argumento que é a instância da classe AbstractSource. Instâncias de uma classe AbstractSourceFilter delegam a busca de dados para o objeto AbstractSource passado para o seu construtor. ConcreteSourceFilter corresponde a qualquer subclasse concreta de AbstractSourceFilter. Subclasses de abstractSourceFilter devem estender o comportamento do método getData que herdam de AbstractSourceFilter para executar a transformação adequada ou analisar as operações. Participantes AbstractSink Representao o cliente da nossa aplicação. Ao contrário dos objetos ConcreteSourceFilter, instâncias de classes abstract sink usam os dados sem passá-lo para outro objeto AbstractSourceFilter. Vantagens As classes que implementam transformações comum de dados e analises são utilizadas em uma grande variedade de programas. Deve ser possível combinar a dinâmica de análise de dados e objetos de transformação, ligando-os juntos. O uso de objetos de transformação e análise deve ser transparente para outros objetos. Usos comuns dos filtros Conversão de dados para um formato especifico. Adição de informações às mensagens recebidas. Filtragem de dados. Lotes, agregando 10 mensagens recebidas e enviá-las juntas em uma única saída por exemplo. Concatenando os elementos de dados de mensagens relacionadas em uma única mensagem de saída EXEMPLO DE APLICAÇÃO Autenticação de Usuário (WEB). O exemplo da aplicação tem o objetivo de fazer com que dois usuários se autentiquem no sistema, um como administrador e outro como usuário padrão. Após autenticação o sistema utilizará filtros (utilização do padrão Filter) de controle para definir o tipo de acesso que cada usuário terá no sistema. O usuário administrador terá acesso total e o usuário padrão terá acesso restrito. OBS: O arquivo fonte desta aplicação se encontra no arquivo NetBeans_Exemplo_Pratica.rar. EXEMPLO DE APLICAÇÃO Prática Com base nos conhecimentos obtidos do padrão Filter e dado o diagrama de classe abaixo e as classes X, Y implemente uma solução que busque do arquivo e imprima o login de todos os usuários e imprima uma lista de todos os e-mails que serão desativados por não serem acessados a mais de 20 dias. Obs: Deverá ser colocado na classe ArquivoeIp.java o caminho para o arquivo input.txt, que contém os dados a serem lidos. O programa devera imprimir a seguinte saída: Login de todos os usuários: E-mails que serão desativados: - [email protected] - [email protected] Diagrama da Prática Dúvidas? CONTATOS [email protected] [email protected] [email protected] REFERÊNCIAS http://msdn.microsoft.com/en-us/library/ff647419.aspx http://tutorials.freeskills.com/professional-xml-part-4-s http://www.eaipatterns.com/PipesAndFilters.html ome-sax-designpatterns.htm http://www.batebyte.pr.gov.br/modules/conteudo/conteudo.php?cont eudo=1049