A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)

Apresentações semelhantes


Apresentação em tema: "Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)"— Transcrição da apresentação:

1 Decorator e Composite 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 2 Decorator 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)); }

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??? Criar uma subclasse de FileInputStream??? Pode ser... mas vamos poluir a hierarquia quando adicionarmos novos comportamentos Pode ser... mas vamos poluir a hierarquia quando adicionarmos novos comportamentos 3 Decorator e Iterator ZipInputStreamBufferedInputStream

4 Decorator Usando herança 4 Decorator e Iterator ZipInputStreamBufferedInputStream FileInputStream ZipBufferedInputStream Poluição da hierarquia!!!

5 Decorator Alternativa: delegação!!! Decorando o comportamento de cada Stream Decorando o comportamento de cada Stream 5 Decorator e Iterator Cliente FileInputStream Cliente BufferedInputStream FileInputStream Cliente ZipInputStream FileInputStream BufferedInputStream

6 Decorator Estrutura 6 Decorator e Iterator > InputStream FileInputStreamFilterInputStream 1 1 BufferedInputStreamZipInputStream

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 7 Decorator e Iterator BufferedInputStream arq = new BufferedInputStream(new FileInputStream("c:/a.txt"));

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. 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 acrescentar responsabilidades a objetos individuais sem afetar outros objetos para responsabilidades que podem ser opcionais para responsabilidades que podem ser opcionais quando a extensão através de subclasses é impraticável devido ao estouro na quantidade de subclasses quando a extensão através de subclasses é impraticável devido ao estouro na quantidade de subclasses 8 Decorator e Iterator

9 Decorator Conseqüências maior flexibilidade do que a herança estática maior flexibilidade do que a herança estática evita superclasses sobrecarregadas de características evita superclasses sobrecarregadas de características grande quantidade de pequenos objetos grande quantidade de pequenos objetos 9 Decorator e Iterator

10

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. 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... Crie um leitor de stream com dedo duro, bufferizado, com suporte à leitura de dados String, boolean, etc Decorator e Iterator DataInputStream d = new DataInputStream( new DedoDuroInputStream( new BufferedInputStream( new FileInputStream("c:/teste.txt") ) );

12 Importante: Tenha certeza que você entendeu a diferença do Adapter para o Decorator!

13 13 Composite 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

14 14 Composite Composite Agora vamos relacioná-las... PáginaDocumento Figura Linha Coluna * * * TabelaCaracter Nota

15 15 Composite Composite Problemas??? 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 * * * TabelaCaracter Nota Sabia que você pode inserir Texto em Figura? E claro... Texto na Nota. Spaghetti CAOS Software em Crise!!!

16 16 Composite 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. 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.

17 17 Composite Composite Aplicabilidade para representar hierarquias parte-todo de objetos 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 os clientes devem ser capazes de ignorar a diferença entre composições de objetos e objetos individuais

18 18 Composite Composite Solução Definir estruturas que podem ser compostas Definir estruturas que podem ser compostas Definir estruturas que não podem ser compostas Definir estruturas que não podem ser compostas Definir uma interface única Definir uma interface única Fazer composição recursiva Fazer composição recursiva

19 19 Composite Composite PáginaDocumento Figura Linha Coluna * * Tabela Caracter Nota > Desenhavel CompostoNaoComposto Não é composto É composto

20 20 Composite Composite Conseqüências define hierarquias de classes que consistem de objetos primitivos e objetos compostos define hierarquias de classes que consistem de objetos primitivos e objetos compostos torna o cliente simples, tratando uniformemente as estruturas primitivas e compostas torna o cliente simples, tratando uniformemente as estruturas primitivas e compostas torna mais fácil o acréscimo de novos componentes primitivos ou compostos torna mais fácil o acréscimo de novos componentes primitivos ou compostos pode tornar o projeto genérico demais pode tornar o projeto genérico demais

21

22 Padrões semelhantes Decorator usa composição para estender funcionalidade Façade usa composição para esconder complexidade

23 Dúvidas? ? 23 Decorator e Iterator


Carregar ppt "Decorator e Composite Nazareno Andrade (baseado no material de Hyggo Almeida)"

Apresentações semelhantes


Anúncios Google