aula 06 - uml e padrões de projeto
TRANSCRIPT
![Page 1: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/1.jpg)
Especialização em Desenvolvimento Java UML e Padrões de Projetos
AULA 06 – PADRÕES ESTRUTURAIS
Prof. Vinícius de Paula -‐ [email protected]
![Page 2: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/2.jpg)
Padrões Estruturais
![Page 3: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/3.jpg)
Padrões Estruturais As interações entre os objetos de um sistema podem gerar fortes dependências entre esses elementos.
UML e Padrões de Projeto Centro Universitário do Triângulo 3
![Page 4: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/4.jpg)
Padrões Estruturais As interações entre os objetos de um sistema podem gerar fortes dependências entre esses elementos.
• Essas dependências aumentam a complexidade das eventuais alterações no funcionamento do sistema.
UML e Padrões de Projeto Centro Universitário do Triângulo 4
![Page 5: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/5.jpg)
Padrões Estruturais As interações entre os objetos de um sistema podem gerar fortes dependências entre esses elementos.
• Essas dependências aumentam a complexidade das eventuais alterações no funcionamento do sistema.
• Consequentemente, o custo de manutenção aumenta.
UML e Padrões de Projeto Centro Universitário do Triângulo 5
![Page 6: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/6.jpg)
Padrões Estruturais As interações entre os objetos de um sistema podem gerar fortes dependências entre esses elementos.
• Essas dependências aumentam a complexidade das eventuais alterações no funcionamento do sistema.
• Consequentemente, o custo de manutenção aumenta.
Veremos alguns padrões de projeto estruturais que diminuem o acoplamento entre os objetos de um sistema orientado a objetos.
UML e Padrões de Projeto Centro Universitário do Triângulo 6
![Page 7: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/7.jpg)
Adapter
![Page 8: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/8.jpg)
Adapter ObjeSvo segundo o GoF:
UML e Padrões de Projeto Centro Universitário do Triângulo 8
![Page 9: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/9.jpg)
Adapter ObjeSvo segundo o GoF:
• Converter a interface de uma classe em outra interface esperada pelos clientes.
UML e Padrões de Projeto Centro Universitário do Triângulo 9
![Page 10: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/10.jpg)
Adapter ObjeSvo segundo o GoF:
• Converter a interface de uma classe em outra interface esperada pelos clientes.
• Adapter permite a comunicação entre classes que não poderiam trabalhar juntas devido à incompaSbilidade de suas interfaces.
UML e Padrões de Projeto Centro Universitário do Triângulo 10
![Page 11: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/11.jpg)
Adapter ObjeSvo segundo o GoF:
• Converter a interface de uma classe em outra interface esperada pelos clientes.
• Adapter permite a comunicação entre classes que não poderiam trabalhar juntas devido à incompaSbilidade de suas interfaces.
UML e Padrões de Projeto Centro Universitário do Triângulo 11
Permitir que um objeto seja substituído por outro que, apesar de realizar a mesma tarefa, possui uma interface diferente.
![Page 12: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/12.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 12
Estrutura do Adapter, segundo GoF (pág. 159)
![Page 13: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/13.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 13
Estrutura do Adapter, segundo GoF (pág. 159)
Define a interface uSlizada pelo Client
![Page 14: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/14.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 14
Estrutura do Adapter, segundo GoF (pág. 159)
Define a interface uSlizada pelo Client
Define o novo objeto a ser uSlizado
![Page 15: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/15.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 15
Estrutura do Adapter, segundo GoF (pág. 159)
Define a interface uSlizada pelo Client
Define o novo objeto a ser uSlizado
Implementa a interface definida pelo Target e adapta as chamadas do Client para o Adaptee
![Page 16: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/16.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 16
Sistema existente Classe do novo fornecedor
![Page 17: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/17.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 17
Sistema existente Classe do novo fornecedor
A interface não é compatível, e não queremos resolver o problema mudando o código existente.
![Page 18: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/18.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 18
Sistema existente Classe do novo fornecedor
Adaptador
![Page 19: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/19.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 19
Sistema existente Classe do novo fornecedor
Adaptador
O adaptador implementa a interface que as classes do sistema existente espera.
![Page 20: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/20.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 20
Sistema existente Classe do novo fornecedor
Adaptador
E se comunica com a interface do novo fornecedor para atender as solicitações do sistema existente.
![Page 21: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/21.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 21
Sistema existente
Classe do novo
fornecedor
Adaptador
![Page 22: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/22.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 22
Sistema existente
Classe do novo
fornecedor
Adaptador
Nenhuma* alteração no código
![Page 23: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/23.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 23
Sistema existente
Classe do novo
fornecedor
Adaptador
Nenhuma alteração no código Nenhuma* alteração no código
![Page 24: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/24.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 24
Sistema existente
Classe do novo
fornecedor
Adaptador
Nenhuma* alteração no código Nenhuma alteração no código Novo código
![Page 25: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/25.jpg)
Adapter Cenário Prá=co
Estamos realizando uma manutenção no sistema de gerenciamento de uma determinada empresa. O controle de ponto desse sistema possui diversas limitações. Essas limitações causam muitos prejuízos, principalmente financeiros.
UML e Padrões de Projeto Centro Universitário do Triângulo 25
![Page 26: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/26.jpg)
Adapter Cenário Prá=co
Estamos realizando uma manutenção no sistema de gerenciamento de uma determinada empresa. O controle de ponto desse sistema possui diversas limitações. Essas limitações causam muitos prejuízos, principalmente financeiros.
Uma empresa parceira implementou uma biblioteca Java para controlar a entrada e saída dos funcionários. Essa biblioteca não possui as limitações que existem hoje no sistema que estamos realizando manutenção. Os diretores decidiram que a melhor estratégia seria adquirir esta biblioteca e implantá-‐la no sistema.
UML e Padrões de Projeto Centro Universitário do Triângulo 26
![Page 27: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/27.jpg)
Adapter Cenário Prá=co
Para implantar esta biblioteca, teremos que subsStuir as classes que atualmente cuidam do controle de ponto pelas classes desta biblioteca.
UML e Padrões de Projeto Centro Universitário do Triângulo 27
![Page 28: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/28.jpg)
Adapter Cenário Prá=co
Para implantar esta biblioteca, teremos que subsStuir as classes que atualmente cuidam do controle de ponto pelas classes desta biblioteca.
A complexidade desta desta subsStuição é alta pois os métodos das classes anSgas não são compa\veis com os métodos das classes novas. Em outras palavras, as interfaces são diferentes.
UML e Padrões de Projeto Centro Universitário do Triângulo 28
![Page 29: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/29.jpg)
Adapter Como podemos tentar minimizar o impacto desta subsStuição de código?
UML e Padrões de Projeto Centro Universitário do Triângulo 29
![Page 30: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/30.jpg)
Adapter Como podemos tentar minimizar o impacto desta subsStuição de código?
UML e Padrões de Projeto Centro Universitário do Triângulo 30
Definindo classes intermediárias para adaptar as chamadas às classes da biblioteca que foi adquirida.
![Page 31: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/31.jpg)
Adapter Cenário Prá=co
Atualmente a entrada de um funcionário é registrada da seguintes maneira:
UML e Padrões de Projeto Centro Universitário do Triângulo 31
ControleDePonto controleDePonto = new ControleDePonto();Funcionario funcionario = new Funcionario("Jose da Silva");controleDePonto.registraEntrada(funcionario);
![Page 32: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/32.jpg)
Adapter Cenário Prá=co
Atualmente a entrada de um funcionário é registrada da seguintes maneira:
UML e Padrões de Projeto Centro Universitário do Triângulo 32
ControleDePonto controleDePonto = new ControleDePonto();Funcionario funcionario = new Funcionario("Jose da Silva");controleDePonto.registraEntrada(funcionario);
O método registraEntrada espera um objeto do Spo
Funcionario
![Page 33: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/33.jpg)
Adapter Cenário Prá=co
USlizando as classes da nova biblioteca, a entrada de um novo funcionário deveria ser registrada assim:
UML e Padrões de Projeto Centro Universitário do Triângulo 33
ControleDePontoNovo controleDePontoNovo = ...Funcionario funcionario = ...// true indica entrada e false indica saída controleDePontoNovo.registra(funcionario.getCodigo(), true);
![Page 34: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/34.jpg)
Adapter Cenário Prá=co
USlizando as classes da nova biblioteca, a entrada de um novo funcionário deveria ser registrada assim:
UML e Padrões de Projeto Centro Universitário do Triângulo 34
ControleDePontoNovo controleDePontoNovo = ...Funcionario funcionario = ...// true indica entrada e false indica saída controleDePontoNovo.registra(funcionario.getCodigo(), true);
O método registra recebe dois argumentos, o ID do funcionário e um booleano indicando se o registro se
trata da entrada ou saída do funcionário
![Page 35: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/35.jpg)
Adapter • Para diminuir o impacto no código do sistema, podemos criar o seguinte adaptador:
UML e Padrões de Projeto Centro Universitário do Triângulo 35
![Page 36: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/36.jpg)
Adapter • Para diminuir o impacto no código do sistema, podemos criar o seguinte adaptador:
UML e Padrões de Projeto Centro Universitário do Triângulo 36
public class ControleDePontoAdapter extends ControleDePonto {
private ControleDePontoNovo controleDePontoNovo;
public void registraEntrada(Funcionario funcionario) {
this.controleDePontoNovo.registra(funcionario.getCodigo(), true); }}
![Page 37: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/37.jpg)
Adapter • Para diminuir o impacto no código do sistema, podemos criar o seguinte adaptador:
UML e Padrões de Projeto Centro Universitário do Triângulo 37
public class ControleDePontoAdapter extends ControleDePonto {
private ControleDePontoNovo controleDePontoNovo;
public void registraEntrada(Funcionario funcionario) {
this.controleDePontoNovo.registra(funcionario.getCodigo(), true); }}
A interface conhecida pelo sistema existente é mantida pelo adaptador
![Page 38: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/38.jpg)
Adapter • Para diminuir o impacto no código do sistema, podemos criar o seguinte adaptador:
UML e Padrões de Projeto Centro Universitário do Triângulo 38
public class ControleDePontoAdapter extends ControleDePonto {
private ControleDePontoNovo controleDePontoNovo;
public void registraEntrada(Funcionario funcionario) {
this.controleDePontoNovo.registra(funcionario.getCodigo(), true); }}
A chamada ao método da nova biblioteca é encapsulada pelo adaptador
![Page 39: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/39.jpg)
Adapter • Podemos uSlizar o adaptador como se esSvéssemos uSlizando o controle de ponto anSgo.
UML e Padrões de Projeto Centro Universitário do Triângulo 39
![Page 40: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/40.jpg)
Adapter • Podemos uSlizar o adaptador como se esSvéssemos uSlizando o controle de ponto anSgo.
UML e Padrões de Projeto Centro Universitário do Triângulo 40
ControleDePonto controleDePonto = new ControleDePontoAdapter();Funcionario funcionario = ...controleDePonto.registraEntrada(funcionario);
![Page 41: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/41.jpg)
Adapter • Podemos uSlizar o adaptador como se esSvéssemos uSlizando o controle de ponto anSgo.
UML e Padrões de Projeto Centro Universitário do Triângulo 41
ControleDePonto controleDePonto = new ControleDePontoAdapter();Funcionario funcionario = ...controleDePonto.registraEntrada(funcionario);
Dessa forma, o código do sistema atual deve ser modificado apenas no trecho em que a classe responsável pelo controle
de ponto é instanciada.
![Page 42: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/42.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 42
Modelo de Classes do Cenário Prá=co
![Page 43: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/43.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 43
public class Funcionario {
private String nome;
public Funcionario(String nome) {
this.nome = nome; }
public String getNome() {
return nome; }}
Defina uma classe Funcionario
![Page 44: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/44.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 44
public class ControleDePonto {
public void registraEntrada(Funcionario f) {
Calendar calendar = Calendar.getInstance(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy H:m:s");
String format = simpleDateFormat.format(calendar.getTime()); System.out.println("Entrada: " + f.getNome() + " às " + format); }
public void registraSaida(Funcionario f) {
Calendar calendar = Calendar.getInstance(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy H:m:s");
String format = simpleDateFormat.format(calendar.getTime()); System.out.println("Saída: " + f.getNome() + " às " + format); }}
Defina a classe de controle de ponto utilizada pelo sistema atual
![Page 45: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/45.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 45
public class TestaControleDePonto {
public static void main(String[] args) throws InterruptedException {
ControleDePonto controleDePonto = new ControleDePonto(); Funcionario funcionario = new Funcionario("Jose da Silva");
controleDePonto.registraEntrada(funcionario);
Thread.sleep(5000);
controleDePonto.registraSaida(funcionario); }}
Teste a classe de controle de ponto
![Page 46: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/46.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 46
public class ControleDePontoNovo {
public void registra(Funcionario f, boolean entrada) {
Calendar calendar = Calendar.getInstance(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy H:m:s"); String format = simpleDateFormat.format(calendar.getTime());
if (entrada == true) {
System.out.println("Entrada: " + f.getNome() + " às " + format);
} else {
System.out.println("Saída: " + f.getNome() + " às " + format);
} }}
Defina a classe da nova biblioteca
![Page 47: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/47.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 47
public class ControleDePontoAdapter extends ControleDePonto{
private ControleDePontoNovo controleDePontoNovo;
public ControleDePontoAdapter() {
this.controleDePontoNovo = new ControleDePontoNovo(); }
public void registraEntrada(Funcionario f) {
this.controleDePontoNovo.registra(f, true); }
public void registraSaida(Funcionario f) {
this.controleDePontoNovo.registra(f, false); }}
Defina a classe do adaptador
![Page 48: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/48.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 48
public class TestaControleDePonto {
public static void main(String[] args) throws InterruptedException {
ControleDePonto controleDePonto = new ControleDePontoAdapter(); Funcionario funcionario = new Funcionario("Jose da Silva");
controleDePonto.registraEntrada(funcionario);
Thread.sleep(5000);
controleDePonto.registraSaida(funcionario); }}
Altere a classe de teste para utilizar o adaptador
![Page 49: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/49.jpg)
Adapter
UML e Padrões de Projeto Centro Universitário do Triângulo 49
public class TestaControleDePonto {
public static void main(String[] args) throws InterruptedException {
ControleDePonto controleDePonto = new ControleDePontoAdapter(); Funcionario funcionario = new Funcionario("Jose da Silva");
controleDePonto.registraEntrada(funcionario);
Thread.sleep(5000);
controleDePonto.registraSaida(funcionario); }}
Única modificação no código do cliente que utiliza o sistema atual
![Page 50: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/50.jpg)
Decorator
![Page 51: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/51.jpg)
Decorator ObjeSvo segundo o GoF:
UML e Padrões de Projeto Centro Universitário do Triângulo 51
![Page 52: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/52.jpg)
Decorator ObjeSvo segundo o GoF:
• Anexar responsabilidades adicionais a um objeto dinamicamente.
UML e Padrões de Projeto Centro Universitário do Triângulo 52
![Page 53: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/53.jpg)
Decorator ObjeSvo segundo o GoF:
• Anexar responsabilidades adicionais a um objeto dinamicamente. • Decorators oferecem uma alternaSva flexível ao uso de herança para estender uma funcionalidade.
UML e Padrões de Projeto Centro Universitário do Triângulo 53
![Page 54: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/54.jpg)
Decorator ObjeSvo segundo o GoF:
• Anexar responsabilidades adicionais a um objeto dinamicamente. • Decorators oferecem uma alternaSva flexível ao uso de herança para estender uma funcionalidade.
UML e Padrões de Projeto Centro Universitário do Triângulo 54
Adicionar funcionalidades a um objeto dinamicamente.
![Page 55: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/55.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 55
Estrutura do Decorator, segundo GoF (pág. 199)
![Page 56: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/56.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 56
Estrutura do Decorator, segundo GoF (pág. 199)
Define a interface de objetos que possuem determinada tarefa
![Page 57: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/57.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 57
Estrutura do Decorator, segundo GoF (pág. 199)
Define a interface de objetos que possuem determinada tarefa
Implementação parScular do Component
![Page 58: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/58.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 58
Estrutura do Decorator, segundo GoF (pág. 199)
Define a interface de objetos que possuem determinada tarefa
Implementação parScular do Component
Classe abstrata que mantém uma referência para um
Component e será uSlizada para padronizar os objetos
decoradores
![Page 59: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/59.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 59
Estrutura do Decorator, segundo GoF (pág. 199)
Define a interface de objetos que possuem determinada tarefa
Implementação parScular do Component
Classe abstrata que mantém uma referência para um
Component e será uSlizada para padronizar os objetos
decoradores
Implementação de um Decorator
![Page 60: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/60.jpg)
Decorator Cenário Prá=co
Como no exemplo práSco do padrão Factory Method, consideremos um sistema de envio de mensagens.
UML e Padrões de Projeto Centro Universitário do Triângulo 60
![Page 61: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/61.jpg)
Decorator Cenário Prá=co
Como no exemplo práSco do padrão Factory Method, consideremos um sistema de envio de mensagens.
Nesse cenário, definimos uma interface para padronizar os emissores:
UML e Padrões de Projeto Centro Universitário do Triângulo 61
public interface Emissor {
void envia(String mensagem);}
![Page 62: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/62.jpg)
Decorator Cenário Prá=co
Um possível emissor, poderia ser implementado da seguinte maneira:
UML e Padrões de Projeto Centro Universitário do Triângulo 62
public class EmissorBasico implements Emissor {
public void envia(String mensagem) {
System.out.println("Enviando uma mensagem: "); System.out.println(mensagem); } }
![Page 63: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/63.jpg)
Decorator Cenário Prá=co
Suponhamos que agora estejamos interessados em adicionar algumas funcionalidades no processo de envio de mensagem.
Tais funcionalidades incluem criptografia e compressão de mensagens.
UML e Padrões de Projeto Centro Universitário do Triângulo 63
![Page 64: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/64.jpg)
Decorator Como podemos implementar funcionalidades adicionais sem alterar as classes que definem os emissores?
UML e Padrões de Projeto Centro Universitário do Triângulo 64
![Page 65: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/65.jpg)
Decorator Como podemos implementar funcionalidades adicionais sem alterar as classes que definem os emissores?
UML e Padrões de Projeto Centro Universitário do Triângulo 65
Cada funcionalidade adicional (decoração) será implementada por um novo objeto (Decorator).
![Page 66: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/66.jpg)
Decorator Alguns pontos para se pensar:
UML e Padrões de Projeto Centro Universitário do Triângulo 66
![Page 67: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/67.jpg)
Decorator Alguns pontos para se pensar:
• Quando quisermos enviar uma mensagem não podemos chamar diretamente os emissores, pois as funcionalidades adicionais não serão executadas.
UML e Padrões de Projeto Centro Universitário do Triângulo 67
![Page 68: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/68.jpg)
Decorator Alguns pontos para se pensar:
• Quando quisermos enviar uma mensagem não podemos chamar diretamente os emissores, pois as funcionalidades adicionais não serão executadas.
• Devemos entregar a mensagem a um decorador que executará a tarefa para a qual foi concebido.
UML e Padrões de Projeto Centro Universitário do Triângulo 68
![Page 69: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/69.jpg)
Decorator Alguns pontos para se pensar:
• Quando quisermos enviar uma mensagem não podemos chamar diretamente os emissores, pois as funcionalidades adicionais não serão executadas.
• Devemos entregar a mensagem a um decorador que executará a tarefa para a qual foi concebido.
• O decorador por sua vez terá a responsabilidade repassar a mensagem a um emissor para que ela seja enviada. Dessa forma, todo decorador deve possuir um emissor.
UML e Padrões de Projeto Centro Universitário do Triângulo 69
![Page 70: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/70.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 70
Modelo de Classes do Cenário Prá=co
![Page 71: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/71.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 71
public abstract class EmissorDecorator implements Emissor {
private Emissor emissor;
public EmissorDecorator(Emissor emissor) {
this.emissor = emissor;}
public abstract void envia(String mensagem);
public Emissor getEmissor () {
return this.emissor;
}}
Defina uma classe para modelar o decorador de emissores
![Page 72: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/72.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 72
Crie um decorador que envia mensagens criptografadas
public class EmissorDecoratorComCriptografia extends EmissorDecorator{
public EmissorDecoratorComCriptografia(Emissor emissor) {
super(emissor); } public void envia(String mensagem) {
System.out.println("Enviando mensagem criptografada: "); this.getEmissor().envia(criptografa(mensagem)); } private String criptografa(String mensagem) {
String mensagemCriptografada = new StringBuilder(mensagem).reverse().toString(); return mensagemCriptografada; }}
![Page 73: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/73.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 73 Crie um decorador que envia mensagens comprimidas
public class EmissorDecoratorComCompressao extends EmissorDecorator {
public EmissorDecoratorComCompressao(Emissor emissor) {
super(emissor); } public void envia(String mensagem) {
System.out.println("Enviando mensagem comprimida: "); String mensagemComprimida;
try {
mensagemComprimida = comprime(mensagem);
} catch (IOException e) {
mensagemComprimida = mensagem; } this.getEmissor().envia(mensagemComprimida); }// continua...
![Page 74: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/74.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 74
Crie um decorador que envia mensagens comprimidas
private String comprime(String mensagem) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream(); DeflaterOutputStream dout = new DeflaterOutputStream(out, new Deflater()); dout.write(mensagem.getBytes()); dout.close();
return new String(out.toByteArray()); }}
![Page 75: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/75.jpg)
Decorator
UML e Padrões de Projeto Centro Universitário do Triângulo 75
Crie uma classe para testar os decoradores
public class TestaEmissorDecorator {
public static void main(String[] args) {
String mensagem = "teste"; Emissor emissorCript = new EmissorDecoratorComCriptografia(
new EmissorBasico()); emissorCript.envia(mensagem);
Emissor emissorCompr = new EmissorDecoratorComCompressao(new EmissorBasico());
emissorCompr.envia(mensagem);
Emissor emissorCriptCompr = new EmissorDecoratorComCriptografia(new EmissorDecoratorComCompressao(new EmissorBasico()));
emissorCriptCompr.envia(mensagem); }}
![Page 76: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/76.jpg)
Decorator Consequências de se usar decoradores:
UML e Padrões de Projeto Centro Universitário do Triângulo 76
![Page 77: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/77.jpg)
Decorator Consequências de se usar decoradores:
• Mais flexibilidade que herança estáSca;
• O modelo tende a ficar mais simples e uniforme.
UML e Padrões de Projeto Centro Universitário do Triângulo 77
![Page 78: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/78.jpg)
Decorator Consequências de se usar decoradores:
• Mais flexibilidade que herança estáSca;
• O modelo tende a ficar mais simples e uniforme.
Entretanto:
UML e Padrões de Projeto Centro Universitário do Triângulo 78
![Page 79: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/79.jpg)
Decorator Consequências de se usar decoradores:
• Mais flexibilidade que herança estáSca;
• O modelo tende a ficar mais simples e uniforme.
Entretanto:
• Apesar de um Decorator e o Component serem do mesmo Spo, não são o mesmo objeto;
• Proliferação de “pequenos” objetos que implementam as extensões.
UML e Padrões de Projeto Centro Universitário do Triângulo 79
![Page 80: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/80.jpg)
Facade
![Page 81: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/81.jpg)
Facade ObjeSvo segundo o GoF:
UML e Padrões de Projeto Centro Universitário do Triângulo 81
![Page 82: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/82.jpg)
Facade ObjeSvo segundo o GoF:
• Oferecer uma interface única para um conjunto de interfaces de um subsistema.
UML e Padrões de Projeto Centro Universitário do Triângulo 82
![Page 83: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/83.jpg)
Facade ObjeSvo segundo o GoF:
• Oferecer uma interface única para um conjunto de interfaces de um subsistema.
• Facade define uma interface de nível mais elevado que torna o subsistema mais fácil de usar.
UML e Padrões de Projeto Centro Universitário do Triângulo 83
![Page 84: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/84.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 84
Motivação para o uso do Facade, segundo GoF (pág. 208)
![Page 85: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/85.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 85
Motivação para o uso do Facade, segundo GoF (pág. 208)
Prover uma interface simplificada para a utilização de várias interfaces de um subsistema.
![Page 86: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/86.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 86
Estrutura do Facade, segundo GoF (pág. 210)
![Page 87: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/87.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 87
Estrutura do Facade, segundo GoF (pág. 210)
Classe intermediária que simplifica o acesso aos
componentes do subsistema
![Page 88: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/88.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 88
Estrutura do Facade, segundo GoF (pág. 210)
Classe intermediária que simplifica o acesso aos
componentes do subsistema
Componente que compõe o susbsistema
![Page 89: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/89.jpg)
Facade Cenário Prá=co
Estamos fazendo algumas melhorias em um sistema que orquestra todos os procedimentos que devem ser realizados após o registro de um pedido.
UML e Padrões de Projeto Centro Universitário do Triângulo 89
![Page 90: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/90.jpg)
Facade Cenário Prá=co
Estamos fazendo algumas melhorias em um sistema que orquestra todos os procedimentos que devem ser realizados após o registro de um pedido.
Quando um pedido é realizado, o módulo que gerencia o estoque deve ser avisado para que o produto seja encaminhado para o endereço de entrega.
UML e Padrões de Projeto Centro Universitário do Triângulo 90
![Page 91: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/91.jpg)
Facade Cenário Prá=co
Estamos fazendo algumas melhorias em um sistema que orquestra todos os procedimentos que devem ser realizados após o registro de um pedido.
Quando um pedido é realizado, o módulo que gerencia o estoque deve ser avisado para que o produto seja encaminhado para o endereço de entrega.
O módulo financeiro deve ser avisado para que o processo de faturamento seja realizado.
UML e Padrões de Projeto Centro Universitário do Triângulo 91
![Page 92: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/92.jpg)
Facade Cenário Prá=co
Estamos fazendo algumas melhorias em um sistema que orquestra todos os procedimentos que devem ser realizados após o registro de um pedido.
Quando um pedido é realizado, o módulo que gerencia o estoque deve ser avisado para que o produto seja encaminhado para o endereço de entrega.
O módulo financeiro deve ser avisado para que o processo de faturamento seja realizado.
O módulo de pós venda também deve ser avisado para que contatos futuros sejam realizados com o cliente com o intuito de verificar a saSsfação do mesmo com o produto adquirido.
UML e Padrões de Projeto Centro Universitário do Triângulo 92
![Page 93: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/93.jpg)
Facade Cenário Prá=co
O sistema realiza todos os processos decorrentes da realização de um novo pedido da seguinte forma:
UML e Padrões de Projeto Centro Universitário do Triângulo 93
![Page 94: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/94.jpg)
Facade Cenário Prá=co
O sistema realiza todos os processos decorrentes da realização de um novo pedido da seguinte forma:
UML e Padrões de Projeto Centro Universitário do Triângulo 94
Pedido p = ...estoque.enviaProduto(p.getProduto(), p.getEnderecoDeEntrega(), p.getProdutoID()); finaceiro.fatura(p.getCliente(), p.getProduto(), p.getProdutoID());posVenda.agendaContato(p.getCliente(), p.getProduto());
![Page 95: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/95.jpg)
Facade Cenário Prá=co
Como podemos simplificar essa lógica?
UML e Padrões de Projeto Centro Universitário do Triângulo 95
![Page 96: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/96.jpg)
Facade Cenário Prá=co
Como podemos simplificar essa lógica?
Criando uma classe que encapsula todos os processos que envolvem o acesso aos módulos de estoque, financeiro e pós venda.
UML e Padrões de Projeto Centro Universitário do Triângulo 96
![Page 97: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/97.jpg)
Facade Cenário Prá=co
Como podemos simplificar essa lógica?
Criando uma classe que encapsula todos os processos que envolvem o acesso aos módulos de estoque, financeiro e pós venda.
UML e Padrões de Projeto Centro Universitário do Triângulo 97
PedidoFacade facade = new PedidoFacade(...);Pedido pedido = new Pedido(...);facade.registraPedido(pedido);
![Page 98: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/98.jpg)
Facade Cenário Prá=co
Como podemos simplificar essa lógica?
Criando uma classe que encapsula todos os processos que envolvem acesso aos módulos de estoque, financeiro e pós venda.
UML e Padrões de Projeto Centro Universitário do Triângulo 98
PedidoFacade facade = new PedidoFacade(...);Pedido pedido = new Pedido(...);facade.registraPedido(pedido);
Dessa forma, quando um pedido é realizado não é mais necessário acessar diretamente diversos módulos diferentes, diminuindo
assim a complexidade das operações
![Page 99: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/99.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 99
Modelo de Classes do Cenário Prá=co
![Page 100: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/100.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 100
Defina a classe Pedido
public class Pedido {
private String produto; private String cliente; private String enderecoDeEntrega; private long pedidoID;
public Pedido(String produto, String cliente, String enderecoDeEntrega, long pedidoID) {
this.produto = produto; this.cliente = cliente; this.enderecoDeEntrega = enderecoDeEntrega; this.pedidoID = pedidoID; }
// getters e setters...
![Page 101: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/101.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 101
Defina a classe Financeiro
public class Financeiro {
public void fatura(String cliente, String produto, long pedidoID) {
System.out.println("Fatura:"); System.out.println("Pedido: " + pedidoID); System.out.println("Cliente: " + cliente); System.out.println("Produto: " + produto); }}
![Page 102: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/102.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 102
Defina a classe Estoque
public class Estoque {
public void enviaProduto(String produto, String enderecoDeEntrega, long pedidoID) {
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, 2); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); String format = simpleDateFormat.format(calendar.getTime()); System.out.println("O pedido " + pedidoID + " contendo o produto " + produto + " sera ́ entregue no endereço " + enderecoDeEntrega + " até as 18h do dia " +format); }}
![Page 103: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/103.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 103
Defina a classe PosVenda
public class PosVenda {
public void agendaContato(String cliente, String produto) {
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, 3);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); String format = simpleDateFormat.format(calendar.getTime());
System.out.println("Entrar em contato com " + cliente+ " sobre o produto " + produto + " no dia " + format);
}}
![Page 104: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/104.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 104
Defina a classe PedidoFacade
public class PedidoFacade {
private Estoque estoque; private Financeiro financeiro; private PosVenda posVenda;
public PedidoFacade(Estoque estoque, Financeiro financeiro, PosVenda posVenda) {
this.estoque = estoque; this.financeiro = financeiro; this.posVenda = posVenda;
} public void registraPedido(Pedido p) {
this.estoque.enviaProduto(p.getProduto(), p.getEnderecoDeEntrega(), p.getPedidoID()); this.financeiro.fatura(p.getCliente(), p.getProduto(), p.getPedidoID()); this.posVenda.agendaContato(p.getCliente(), p.getProduto()); }}
![Page 105: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/105.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 105
public class PedidoFacade {
private Estoque estoque; private Financeiro financeiro; private PosVenda posVenda;
public PedidoFacade(Estoque estoque, Financeiro financeiro, PosVenda posVenda) {
this.estoque = estoque; this.financeiro = financeiro; this.posVenda = posVenda;
} public void registraPedido(Pedido p) {
this.estoque.enviaProduto(p.getProduto(), p.getEnderecoDeEntrega(), p.getPedidoID()); this.financeiro.fatura(p.getCliente(), p.getProduto(), p.getPedidoID()); this.posVenda.agendaContato(p.getCliente(), p.getProduto()); }}
O método registraPedido encapsula o acesso aos módulos de estoque, financeiro e pós venda.
![Page 106: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/106.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 106
Defina uma classe para testar o PedidoFacade
public class TestaPedidoFacade {
public static void main(String[] args) {
Estoque estoque = new Estoque(); Financeiro financeiro = new Financeiro(); PosVenda posVenda = new PosVenda();
PedidoFacade facade = new PedidoFacade(estoque , financeiro , posVenda);
Pedido pedido = new Pedido("Smartphone", "Jose da Silva","Av. Nicomedes Alves dos Santos, 4545 - Gavea, Uberlândia - MG", 1234);
facade.registraPedido(pedido); }}
![Page 107: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/107.jpg)
Facade
UML e Padrões de Projeto Centro Universitário do Triângulo 107
public class TestaPedidoFacade {
public static void main(String[] args) {
Estoque estoque = new Estoque(); Financeiro financeiro = new Financeiro(); PosVenda posVenda = new PosVenda();
PedidoFacade facade = new PedidoFacade(estoque , financeiro , posVenda);
Pedido pedido = new Pedido("Smartphone", "Jose da Silva","Av. Nicomedes Alves dos Santos, 4545 - Gavea, Uberlândia - MG", 1234);
facade.registraPedido(pedido); }}
O método da fachada é acionado para registrar o pedido.
![Page 108: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/108.jpg)
Quem faz o quê?
UML e Padrões de Projeto Centro Universitário do Triângulo 108
• Adapter • Decorator • Facade
![Page 109: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/109.jpg)
Quem faz o quê?
UML e Padrões de Projeto Centro Universitário do Triângulo 109
• Adapter Converte uma interface para outra.
• Decorator • Facade
![Page 110: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/110.jpg)
Quem faz o quê?
UML e Padrões de Projeto Centro Universitário do Triângulo 110
• Adapter Converte uma interface para outra.
• Decorator Não muda a interface, só acrescenta responsabilidades.
• Facade
![Page 111: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/111.jpg)
Quem faz o quê?
UML e Padrões de Projeto Centro Universitário do Triângulo 111
• Adapter Converte uma interface para outra.
• Decorator Não muda a interface, só acrescenta responsabilidades.
• Facade Simplifica uma interface.
![Page 112: Aula 06 - UML e Padrões de Projeto](https://reader034.vdocuments.site/reader034/viewer/2022052418/587475cf1a28ab4a758b645b/html5/thumbnails/112.jpg)
Bibliografia • Gamma, Erich; Richard Helm, Ralph Johnson, John M. Vlissides . Design paierns: elements of reusable object-‐oriented sojware. Reading: Addison-‐Wesley, 1995.
• Erich Freeman, Elizabeth Freeman. HeadFirst – Design Paierns. O ́REILLY 2004.
• METSKER, J. Design Paierns Java Workbook. EUA: Addison-‐Wesley 2002.
• K19 Treinamentos, “Design Paierns em Java”.
UML e Padrões de Projeto Centro Universitário do Triângulo 112