Nazareno Andrade (baseado no material de Hyggo Almeida) - ppt carregar
PublicouHelena Barbo Alterado mais de 3 anos atrás
Apresentação em tema: "Nazareno Andrade (baseado no material de Hyggo Almeida)"— Transcrição da apresentação:
1 Nazareno Andrade (baseado no material de Hyggo Almeida)
2 Decorator Vocês sabem como ler um arquivo texto em Java??? Pode-se usar a classe java.io.FileInputStream Vamos fazer um teste public class Leitor { public static void main(String[] args) throws Throwable{ FileInputStream arq = new FileInputStream("c:/a.txt"); byte[] conteudoEmBytes = new byte[arq.available()]; arq.read(conteudoEmBytes); arq.close(); System.out.println(new String(conteudoEmBytes)); } Decorator e Iterator
3 Decorator A classe FileInputStream porém, não utiliza bufferização...
Como utilizar um buffer para armazenar os caracteres durante a leitura? E se quisermos também ter a opção de ler dados compactados com zip? Criar uma subclasse de FileInputStream??? Pode ser... mas vamos poluir a hierarquia quando adicionarmos novos comportamentos ZipInputStream BufferedInputStream Decorator e Iterator
4 Decorator Usando herança FileInputStream ZipInputStream
BufferedInputStream ZipBufferedInputStream Poluição da hierarquia!!! Decorator e Iterator
5 Decorator Alternativa: delegação!!!
Decorando o comportamento de cada Stream Cliente FileInputStream Cliente BufferedInputStream FileInputStream Cliente ZipInputStream BufferedInputStream FileInputStream Decorator e Iterator
6 <<abstract>>
Decorator Estrutura <<abstract>> InputStream 1 1 FileInputStream FilterInputStream BufferedInputStream ZipInputStream Decorator e Iterator
7 Decorator Código com buffer (muda apenas uma linha)
BufferedInputStream contém um FileInputStream Quando a requisição de leitura é feita... BufferedInputStream "decora" a leitura armazenando caracteres no buffer... ... e delega o read() para FileInputStream BufferedInputStream arq = new BufferedInputStream(new FileInputStream("c:/a.txt")); Decorator e Iterator
8 Decorator Intenção agregar responsabilidades adicionais a um objeto dinamicamente. Fornece uma alternativa flexível ao uso de subclasses para extensão de funcionalidades. Aplicabilidade para acrescentar responsabilidades a objetos individuais sem afetar outros objetos para responsabilidades que podem ser opcionais quando a extensão através de subclasses é impraticável devido ao estouro na quantidade de subclasses Decorator e Iterator
9 Decorator Conseqüências maior flexibilidade do que a herança estática
evita superclasses sobrecarregadas de características grande quantidade de pequenos objetos Decorator e Iterator
11 Decorator Vamos Implementar a leitura do arquivo usando BufferedInputStream Criando um novo tipo de decorador para InputStream chamado DedoDuroStream Sempre que a stream do arquivo é lida, imprime-se o dado lido. Crie um leitor de stream com "dedo duro", bufferizado, com suporte à leitura de dados String, boolean, etc... DataInputStream d = new DataInputStream( new DedoDuroInputStream( new BufferedInputStream( new FileInputStream("c:/teste.txt") ) ); Decorator e Iterator
12 Importante: Tenha certeza que você entendeu a diferença do Adapter para o Decorator!
13 Composite Considere o projeto de um editor de documentos
Quais entidades estariam presentes na modelagem do documento??? Coluna Nota Figura Página Comentário Linha Documento Caracter Tabela Composite
14 Composite Agora vamos relacioná-las... * * * Documento Página Coluna
Linha Nota Caracter Figura Tabela Composite
15 Composite Problemas??? Muitos... olha só o Word!!! * Spaghetti CAOS
Software em Crise!!! Problemas??? Muitos... olha só o Word!!! Em uma tabela... pode-se adicionar Figura, Coluna, ... Página Documento Figura Linha Coluna * Tabela Caracter Nota Comentário Sabia que você pode inserir Texto em Figura? E acreditem!!! Quase tudo pode ser colocado dentro de um comentário!!! E claro... Texto na Nota. Quase tudo pode ser comentado!!! Composite
16 Composite Solução – Composite Intenção compor objetos em estruturas de árvores para representarem hierarquias partes- todo. Permite aos clientes tratarem de maneira uniforme objetos individuais e composição de objetos. Composite
17 Composite para representar hierarquias parte-todo de objetos
Aplicabilidade para representar hierarquias parte-todo de objetos os clientes devem ser capazes de ignorar a diferença entre composições de objetos e objetos individuais Composite
18 Composite Solução Definir estruturas que podem ser compostas
Definir estruturas que não podem ser compostas Definir uma interface única Fazer composição recursiva Composite
Composite Documento * Página * <<interface>> Desenhavel NaoComposto Composto É composto Não é composto Caracter Coluna Nota Linha Tabela Figura Composite
20 Composite Conseqüências
define hierarquias de classes que consistem de objetos primitivos e objetos compostos torna o cliente simples, tratando uniformemente as estruturas primitivas e compostas torna mais fácil o acréscimo de novos componentes primitivos ou compostos pode tornar o projeto genérico demais Composite
22 Padrões semelhantes Decorator usa composição para estender funcionalidade Façade usa composição para esconder complexidade