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

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

O Builder é um metalúrgico.

Os ConcreteBuilder são o metalúrgico brasileiro e o metalúrgico alemão.

O metalúrgico brasileiro constrói um carro (Product) Gol com motor de aço e pneus de borracha natural.

O metalúrgico alemão constrói um carro (Product) BMW com motor de alumínio e pneus de silicone.

O Director é a fábrica, que receber um Builder qualquer (metalúrgico) e deixa para o metalúrgico a tarefa de construir as partes do carro.

A fábrica conecta as partes produzidas pelo mecânico.

 

Arquivo Carro.java

/**
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

import java.io.Serializable;

/**
 * Product
 */
public class Carro implements Serializable
{
  /**
   * Identificador de serializacao da classe
   */
  private static final long serialVersionUID = 1L;
  
  /**
   * Modelo do carro
   */
  private String modelo;
  
  /**
   * Motor do carro
   */
  private String motor;
  
  /**
   * Pneus do carro
   */
  private String pneus;

  /**
   * Construtor para inicializar o modelo do carro
   * 
   * @param modelo modelo do carro
   */
  public Carro(String modelo)
  {
    setModelo(modelo);
  }

  /**
   * Retornar o modelo do carro
   * 
   * @return modelo do carro
   */
  public String getModelo()
  {
    return this.modelo;
  }
  
  /**
   * Retornar o motor do carro
   * 
   * @return motor do carro
   */
  public String getMotor()
  {
    return this.motor;
  }

  /**
   * Retornar os pneus do carro
   * 
   * @return pneus do carro
   */
  public String getPneus()
  {
    return this.pneus;
  }

  /**
   * Configurar o modelo do carro
   * 
   * @param modelo modelo do carro
   */
  private void setModelo(String modelo)
  {
    this.modelo = modelo;
  }

  /**
   * Configurar o motor do carro
   * 
   * @param motor motor do carro
   */
  public void setMotor(String motor)
  {
    this.motor = motor;
  }

  /**
   * Configurar os pneus do carro
   * 
   * @param pneus pneus do carro
   */
  public void setPneus(String pneus)
  {
    this.pneus = pneus;
  }
  
  /* (non-Javadoc)
   * @see java.lang.Object#toString()
   */
  public String toString()
  {
    return getModelo() + " com motor de " + getMotor() + " e pneus de " + getPneus();
  }
}

Arquivo Metalurgico.java

/**
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

/**
 * Builder
 */
public interface Metalurgico
{
  /**
   * Construir o motor do carro
   */
  public void buildMotor();
  
  /**
   * Construir os pneus do carro
   */
  public void buildPneus();
  
  /**
   * Retornar o carro construido
   * 
   * @return carro construido
   */
  public Carro getCarro();
}

Arquivo MetalurgicoBrasileiro.java

/**
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

/**
 * ConcreteBuilder
 */
public class MetalurgicoBrasileiro implements Metalurgico
{
  /**
   * Instancia do carro construido
   */
  private Carro carro;
  
  /**
   * Construtor padrao
   */
  public MetalurgicoBrasileiro()
  {
    this.carro = new Carro("Gol");
  }
  
  /* (non-Javadoc)
   * @see com.ybadoo.tutoriais.poo.Metalurgico#buildMotor()
   */
  public void buildMotor()
  {
    this.carro.setMotor("aço");
  }

  /* (non-Javadoc)
   * @see com.ybadoo.tutoriais.poo.Metalurgico#buildPneus()
   */
  public void buildPneus()
  {
    this.carro.setPneus("borracha natural");
  }

  /* (non-Javadoc)
   * @see com.ybadoo.tutoriais.poo.Metalurgico#getCarro()
   */
  public Carro getCarro()
  {
    return this.carro;
  }
}

Arquivo MetalurgicoAlemao.java

/**
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

/**
 * ConcreteBuilder
 */
public class MetalurgicoAlemao implements Metalurgico
{
  /**
   * Instancia do carro construido
   */
  private Carro carro;
  
  /**
   * Construtor padrao
   */
  public MetalurgicoAlemao()
  {
    this.carro = new Carro("BMW");
  }
  
  /* (non-Javadoc)
   * @see com.ybadoo.tutoriais.poo.Metalurgico#buildMotor()
   */
  public void buildMotor()
  {
    this.carro.setMotor("alumínio");
  }

  /* (non-Javadoc)
   * @see com.ybadoo.tutoriais.poo.Metalurgico#buildPneus()
   */
  public void buildPneus()
  {
    this.carro.setPneus("silicone");
  }

  /* (non-Javadoc)
   * @see com.ybadoo.tutoriais.poo.Metalurgico#getCarro()
   */
  public Carro getCarro()
  {
    return this.carro;
  }
}

Arquivo Fabrica.java

/**
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

/**
 * Director
 */
public class Fabrica
{
  /**
   * Metalurgico responsavel pela construcao do carro
   */
  private Metalurgico metalurgico;

  /**
   * Construtor para inicializador o metalurgico responsavel pela construcao do carro 
   * 
   * @param metalurgico metalurgico responsavel pela construcao do carro
   */
  public Fabrica(Metalurgico metalurgico)
  {
      this.metalurgico = metalurgico;
  }

  /**
   * Construcao do carro
   */
  public void buildCarro()
  {
    this.metalurgico.buildMotor();
    this.metalurgico.buildPneus();
  }

  /**
   * Retornar o carro construido
   * 
   * @return carro construido
   */
  public Carro getCarro()
  {
    return this.metalurgico.getCarro();
  }
}

Arquivo Cliente.java

/**
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)
 *                  Ybadoo - Solucoes em Software Livre (www.ybadoo.com.br)
 *
 * Permission is granted to copy, distribute and/or modify this document
 * under the terms of the GNU Free Documentation License, Version 1.3
 * or any later version published by the Free Software Foundation; with
 * no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 * A copy of the license is included in the section entitled "GNU
 * Free Documentation License".
 */

package com.ybadoo.tutoriais.poo;

/**
 * Client
 */
public class Cliente
{
  /**
   * Metodo principal da linguagem de programacao Java
   * 
   * @param args argumentos da linha de comando (nao utilizado)
   */
  public static void main(String[] args)
  {
    Metalurgico metalurgicoBrasileiro = new MetalurgicoBrasileiro();
    
    Fabrica fabricaBrasileira = new Fabrica(metalurgicoBrasileiro);
    
    fabricaBrasileira.buildCarro();
    
    // Gol com motor de aço e pneus de borracha natural
    System.out.println(fabricaBrasileira.getCarro());

    
    Metalurgico metalurgicoAlemao = new MetalurgicoAlemao();
    
    Fabrica fabricaAlema = new Fabrica(metalurgicoAlemao);

    fabricaAlema.buildCarro();
    
    // BMW com motor de alumínio e pneus de silicone
    System.out.println(fabricaAlema.getCarro());
  }
}