Separa la construccion de un objeto complejo de su representacion de tal manera que el mismo proceso de construccion puede crear diferentes representaciones.
Un sistema de edicion de texto, debe dar la capacidad de leer su formato y proveer de distintos convertidores a otros formatos (por ejemplo a HTML, CSV, XML). Dado que los formato posibles son variables con el tiempo, se debe construir un patron de disenno que permita agregar nuevos convertidores de formatos.
Permite crear distintas representaciones de un objeto
Supongase una Accion Financiera, que tiene una empresa emisora, un identificador de la serie, un precio. Se necesita representar la informacion del objeto en formato CSV, HTML y XML
public class AccionFinanciera { .... }See the complete code for AccionFinanciera here.
public String empresa; public String serie; public double precio; public String convertir(AccionBuilder builder) { builder.buildEmpresa(empresa); builder.buildSerie(serie); builder.buildPrecio(precio); return builder.getAccion(); }
La interfase que define a AccionBuilder es:
public interface AccionBuilder { .... }See the complete code for AccionBuilder here.
public void buildEmpresa(String emp); public void buildSerie(String serie); public void buildPrecio(double pr); public String getAccion();
Y para construir una representacion CSV
public class CSVAccion implements AccionBuilder { .... }See the complete code for CSVAccion here.
private String csv=""; public void buildEmpresa(String emp){ csv+=emp+",";} public void buildSerie(String serie){ csv+=serie+",";} public void buildPrecio(double pr){ csv+=pr;} public String getAccion(){ return csv;}
Y para construir una representacion XML
public class XMLAccion implements AccionBuilder { .... }See the complete code for XMLAccion here.
private String xml="<accion >"; public void buildEmpresa(String emp){ xml+="<emision >"+emp+"</emision >";} public void buildSerie(String serie){ xml+="<serie >"+serie+"</serie>";} public void buildPrecio(double pr){ xml+="<precio>"+pr+"</precio>";} public String getAccion(){ return xml + "</accion>";}
El cliente solo debe decidir que Builder tomar
public class ClienteBuilder { .... }See the complete code for ClienteBuilder here.
public static void main(String [] args) { AccionFinanciera acc= new AccionFinanciera(); acc.empresa = "TELMEX"; acc.serie="A"; acc.precio=50.99; CSVAccion csv = new CSVAccion(); System.out.println(acc.convertir(csv)); XMLAccion xml = new XMLAccion(); System.out.println(acc.convertir(xml)); }