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.
/**
* 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();
}
}
/**
* 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();
}
/**
* 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;
}
}
/**
* 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;
}
}
/**
* 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();
}
}
/**
* 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());
}
}