padrão de projeto chain of responsability e template method profa. cintia carvalho oliveira...
TRANSCRIPT
![Page 1: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/1.jpg)
Padrão de Projeto Chain of Responsability e Template Method
Profa. Cintia Carvalho Oliveira
Doutoranda em Ciência da Computação - UFU
Mestre em Ciência da Computação – UFU
Bacharel em Ciência da Computação - UFJF
![Page 2: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/2.jpg)
Problema
Uma aplicação e-commerce precisa se comunicar com vários bancos diferentes para prover mais possibilidades de pagamentos.
Podemos usar uma estrutura de decisão para selecionar ou métodos fábrica. Poderíamos criar estratégias diferentes para cada banco e escolher em tempo de execução.
Em todas ainda utilizamos estruturas de decisão. O Chain of reponsability promete acabar com essas estruturas.
![Page 3: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/3.jpg)
Chain of Responsability
“Evitar o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação. Encadear os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate.”
![Page 4: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/4.jpg)
Chain of Responsability
Implementar a cadeia de responsabilidades
A classe possui um identificador e uma referência para o próximo objeto da corrente.
![Page 5: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/5.jpg)
Chain of Responsability
![Page 6: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/6.jpg)
Chain of Responsability
Verifica se o banco atual pode fazer o pagamento, comparando com o identificador do banco.
Se o elemento não pode responder à solicitação ele repassa ao próximo da lista.
Se nenhum puder responder é disparada uma exceção;
![Page 7: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/7.jpg)
Chain of Responsability
Vamos definir a estrutura da cadeia de responsabilidades.
![Page 8: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/8.jpg)
Chain of Responsability
Vamos definir a cadeia
![Page 9: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/9.jpg)
Chain of Responsability
![Page 10: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/10.jpg)
Template Method
![Page 11: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/11.jpg)
Template Method
Queremos reproduzir a lista de músicas da seguinte maneira:
Ordenado por nome da música
Ordenado por nome do Autor
Ordenado por ano
Ordenado por estrela
Uma ideia é usar o Strategy e implementar uma classe que define o método de reprodução. Mas o método de reprodução é p mesmo a diferença é a criação do playlist.
![Page 12: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/12.jpg)
Template Method
“Definir o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses. Template Method permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo”
Precisamos definir como a playlist será ordenada mas só saberemos em tempo de execução.
![Page 13: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/13.jpg)
Template Methodpublic class MusicaMP3 { String nome; String autor; String ano; int estrelas; public MusicaMP3(String nome, String autor, String ano, int estrela) { this.nome = nome; this.autor = autor; this.ano = ano; this.estrelas = estrela; }}
![Page 14: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/14.jpg)
Template Methodpublic abstract class OrdenadorTemplate { public abstract boolean isPrimeiro(MusicaMP3 musica1, MusicaMP3 musica2); public ArrayList<MusicaMP3> ordenarMusica(ArrayList<MusicaMP3> lista) { ArrayList<MusicaMP3> novaLista = new ArrayList<MusicaMP3>(); for (MusicaMP3 musicaMP3 : lista) { novaLista.add(musicaMP3); } for (int i = 0; i < novaLista.size(); i++) { for (int j = i; j < novaLista.size(); j++) { if (!isPrimeiro(novaLista.get(i), novaLista.get(j))) { MusicaMP3 temp = novaLista.get(j); novaLista.set(j, novaLista.get(i)); novaLista.set(i, temp); } } } return novaLista; }}
![Page 15: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/15.jpg)
![Page 16: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/16.jpg)
![Page 17: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/17.jpg)
![Page 18: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/18.jpg)
![Page 19: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/19.jpg)
![Page 20: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/20.jpg)
![Page 21: Padrão de Projeto Chain of Responsability e Template Method Profa. Cintia Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência](https://reader036.vdocuments.site/reader036/viewer/2022062404/552fc120497959413d8cb771/html5/thumbnails/21.jpg)
Bibliografia
http://www.inf.ufg.br/~fabrizzio/web/java/aula7.pdf
http://brizeno.wordpress.com/category/padroes-de-projeto/chain-of-responsibility/
GAMMA, Erich et al. Padrões de Projeto: Soluções reutilizáveis de software orientado a objetos.
http://brizeno.wordpress.com/category/padroes-de-projeto/template-method/