Ybadoo - Soluções em Software Livre
Tutoriais
Programação Orientada a Objetos

Slides

Exemplo do padrão de projeto Abstract Factory por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Builder por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Factory Method por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Prototype por fluffycat, tutorialspoint ou Wikipédia.

Exemplo do padrão de projeto Singleton por fluffycat, tutorialspoint ou Wikipédia.

Exercício 08.01 Qual problema o padrão Abstract Factory resolve?

Exercício 08.02 Por que você usaria o padrão Abstract Factory?

Exercício 08.03 Qual problema o padrão Builder resolve?

Exercício 08.04 Por que você usaria o padrão Builder?

Exercício 08.05 Qual problema o padrão Factory Method resolve?

Exercício 08.06 Por que você usaria o padrão Factory Method?

Exercício 08.07 Qual problema o padrão Prototype resolve?

Exercício 08.08 Por que você usaria o padrão Prototype?

Exercício 08.09 Qual problema o padrão Singleton resolve?

Exercício 08.10 Por que você usaria o padrão Singleton?

Exercício 08.11 Para exercitar a utilização do padrão de projeto Factory Method, desenvolva uma fábrica de motores, que construa motores de aço, de alumínio e elétricos.

Exercício 08.12 Para exercitar a utilização do padrão de projeto Abstract Factory, desenvolva uma fábrica de automóveis.

Exercício 08.13 Para exercitar a utilização do padrão de projeto Builder, desenvolva uma fábrica de automóveis.

Exercício 08.14 Para exercitar a utilização do padrão de projeto Prototype, desenvolva uma revenda de automóveis.

Exercício 08.15 A listagem a seguir apresenta a classe Bank. Transforme a classe Bank em um Singleton.

Exercício 08.16 Para exercitar a utilização do padrão de projeto Factory Method, desenvolva um conversor de números arábicos, no intervalo de 1 a 1000, para números romanos, números arábicos por extenso e números ordinais por extenso.

Exercício 08.17 Considere os seguintes conceitos do mundo real: pizzaria, pizzaiolo, pizza, consumidor. Considere ainda que em uma determinada pizzaria, dois pizzaiolos se alternam. Um deles trabalha segundas, quartas e sextas e só sabe fazer pizza de calabresa (queijo + calabresa + tomate), o outro trabalha terças, quintas e sábados e só sabe fazer pizza de presunto (queijo + presunto + tomate). A pizzaria fecha aos domingos. Tente mapear os conceitos acima para o padrão Abstract Factory (hierarquia de fábricas, hierarquia de produtos, cliente) e implemente um programa que receba uma data como parâmetro (formato dd/mm/yyyy) e imprima os ingredientes da pizza que é feita no dia ou, se a pizzaria estiver fechada, informe isso na tela. Agora imagine que a pizzaria agora faz também calzones (novamente, de calabresa ou presunto). Complemente a solução com mais este componente.

Exercício 08.18 Considere a classe Livro apresentada a seguir.

public class Livro {
  private String nomeNacional;
  private int ano;
  private List<String> autores;
  private int edicao;
  private String cidade;
  private String editora;
  private String nomeOriginal;
  private List<String> tradutores;
  private int paginas;
  private long isbn;

  public Livro(String nomeNacional,
               int ano,
               List<String> autores,
               int edicao
               String cidade,
               String editora,
               String nomeOriginal,
               List<String> tradutores,
               int paginas,
               long isbn) {
    this.nomeNacional = nomeNacional;
    this.ano = ano;
    this.autores = autores;
    this.edicao = edicao;
    this.cidade = cidade;
    this.editora = editora;
    this.nomeOriginal = nomeOriginal;
    this.tradutores = tradutores;
    this.paginas = paginas;
    this.isbn = isbn;
  }

  // getters e setters omitidos
}

Observe o construtor da classe Livro. Veja como fica complicado escrever tantos parâmetros. Uma solução seria a utilização do padrão de projeto Builder, que seria responsável pela construção do objeto, como por exemplo.

Livro livro = new Livro.LivroBuilder("Java, como programar")
                         .ano(2003)
                         .autores("H. M. Deitel", "P. J. Deitel")
                         .edicao(4)
                         .cidade("Porto Alegre")
                         .editora("Bookman")
                         .nomeOriginal("Java How to Program")
                         .tradutores("Carlos Arthur Lang Lisbôa")
                         .paginas(1386)
                         .isbn(9788536301235L)
                       .build();

Desenvolva a solução requisitada, utilizando o padrão de projeto Builder.