decorator e composite nazareno andrade (baseado no material de hyggo almeida)
TRANSCRIPT
![Page 1: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/1.jpg)
Decorator e CompositeNazareno Andrade
(baseado no material de Hyggo Almeida)
![Page 2: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/2.jpg)
Decorator
Vocês sabem como ler um arquivo texto em Java???
Pode-se usar a classe java.io.FileInputStream
Vamos fazer um teste
2Decorator e Iterator
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)); }}
![Page 3: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/3.jpg)
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
3Decorator e Iterator
ZipInputStream BufferedInputStream
![Page 4: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/4.jpg)
Decorator
Usando herança
4Decorator e Iterator
ZipInputStream BufferedInputStream
FileInputStream
ZipBufferedInputStreamPoluição da hierarquia!!!
![Page 5: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/5.jpg)
Decorator
Alternativa: delegação!!! Decorando o comportamento de cada Stream
5Decorator e Iterator
Cliente FileInputStream
Cliente BufferedInputStream FileInputStream
Cliente ZipInputStream FileInputStreamBufferedInputStream
![Page 6: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/6.jpg)
Decorator
Estrutura
6Decorator e Iterator
<<abstract>>
InputStream
FileInputStream FilterInputStream1
1
BufferedInputStream ZipInputStream
![Page 7: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/7.jpg)
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
7Decorator e Iterator
BufferedInputStream arq = new BufferedInputStream(new
FileInputStream("c:/a.txt"));
![Page 8: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/8.jpg)
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
8Decorator e Iterator
![Page 9: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/9.jpg)
Decorator
Conseqüências maior flexibilidade do que a herança estática evita superclasses sobrecarregadas de características grande quantidade de pequenos objetos
9Decorator e Iterator
![Page 10: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/10.jpg)
![Page 11: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/11.jpg)
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...
11Decorator e Iterator
DataInputStream d = new DataInputStream(
new DedoDuroInputStream(new BufferedInputStream(
new FileInputStream("c:/teste.txt"))
));
![Page 12: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/12.jpg)
Importante:
Tenha certeza que você entendeu a diferença do Adapter para o Decorator!
![Page 13: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/13.jpg)
13Composite
Composite
Considere o projeto de um editor de documentos
Quais entidades estariam presentes na modelagem do documento???
Página
Documento
Figura
Comentário
Nota
Linha
Coluna
TabelaCaracter
![Page 14: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/14.jpg)
14Composite
Composite
Agora vamos relacioná-las...
PáginaDocumento
Figura
Linha
Coluna
*
*
*
TabelaCaracterNota
![Page 15: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/15.jpg)
15Composite
CompositeProblemas??? Muitos... olha só o Word!!!
Em uma tabela... pode-se adicionar Figura, Coluna, ...
Comentário
Quase tudo pode ser comentado!!!
E acreditem!!! Quase tudo pode ser
colocado dentro de um comentário!!!
PáginaDocumento
Figura
Linha
Coluna
*
*
*
TabelaCaracterNota
Sabia que você pode inserir Texto em
Figura?
E claro... Texto na Nota.
SpaghettiCAOS
Software em Crise!!!
![Page 16: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/16.jpg)
16Composite
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.
![Page 17: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/17.jpg)
17Composite
Composite
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
![Page 18: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/18.jpg)
18Composite
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
![Page 19: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/19.jpg)
19Composite
CompositePáginaDocumento
Figura
Linha
Coluna
*
*
Tabela
Caracter Nota
<<interface>>
Desenhavel
CompostoNaoComposto
Não é composto
É composto
![Page 20: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/20.jpg)
20Composite
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
![Page 21: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/21.jpg)
![Page 22: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/22.jpg)
Padrões semelhantes
Decorator usa composição para estender funcionalidade
Façade usa composição para esconder complexidade
![Page 23: Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)](https://reader036.vdocuments.pub/reader036/viewer/2022062512/552fc131497959413d8d5834/html5/thumbnails/23.jpg)
Dúvidas?
?23Decorator e Iterator