Patrón de Diseño: Patrón de Construcción

El patrón Builder, también conocido como patrón de construcción, se utiliza para ensamblar instancias con estructuras complejas.

Ejemplo práctico: generación de un documento con formato específico que incluye título, texto y listas. El patrón se compone de tres componentes pricnipales:

package com.ejemplo.patrones.builder;

/**
 * Interfaz central del patrón constructor
 * Define los métodos necesarios para crear una estructura compleja
 */
public interface Constructor {

    /**
     * Método para crear el encabezado del documento
     * @param titulo texto del encabezado
     */
    void crearEncabezado(String titulo);
    
    /**
     * Método para agregar contenido textual
     * @param texto contenido a añadir
     */
    void agregarTexto(String texto);
    
    /**
     * Método para generar listas
     * @param elementos array de elementos para la lista
     */
    void generarLista(String[] elementos);
    
    /**
     * Método final para completar la construcción
     */
    void finalizar();
    
}

package com.ejemplo.patrones.builder;

/**
 * Clase que coordina la construcción del documento
 * Utiliza polimorfismo para trabajar con distintos tipos de constructores
 */
public class Coordinador {

    private Constructor constructor;
    
    public Coordinador(Constructor constructor) {
        this.constructor = constructor;
    }
    
    public void construirDocumento() {
        constructor.crearEncabezado("Introducción");
        constructor.agregarTexto("Este es un ejemplo de patrón de construcción");
        constructor.generarLista(new String[]{"Punto 1", "Punto 2"});
        constructor.agregarTexto("Conclusión");
        constructor.finalizar();
    }
    
}

package com.ejemplo.patrones.builder;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Implementación específica para archivos HTML
 */
public class ConstructorHTML implements Constructor {

    private StringBuilder contenido = new StringBuilder();
    
    @Override
    public void crearEncabezado(String titulo) {
        contenido.append("\n<html>\n<head>\n<title>").append(titulo).append("</title>\n</head>\n<body>\n");
    }
    
    @Override
    public void agregarTexto(String texto) {
        contenido.append("<p>").append(texto).append("</p>\n");
    }
    
    @Override
    public void generarLista(String[] elementos) {
        contenido.append("\\n"); for (String elemento : elementos) { contenido.append(" - ").append(elemento).append("
\\n"); } contenido.append("\n");
    }
    
    @Override
    public void finalizar() {
        contenido.append("</body>\n</html>");
        
        try (FileWriter escritor = new FileWriter("documento.html")) {
            escritor.write(contenido.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

package com.ejemplo.patrones.builder;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Implementación específica para archivos TXT
 */
public class ConstructorTXT implements Constructor {

    private StringBuilder contenido = new StringBuilder();
    
    @Override
    public void crearEncabezado(String titulo) {
        contenido.append("========================================\n");
        contenido.append("[" + titulo + "]\n");
        contenido.append("========================================\n\n");
    }
    
    @Override
    public void agregarTexto(String texto) {
        contenido.append("[.] ").append(texto).append("\n\n");
    }
    
    @Override
    public void generarLista(String[] elementos) {
        for (String elemento : elementos) {
            contenido.append("\t").append(elemento).append("\n");
        }
        contenido.append("\n");
    }
    
    @Override
    public void finalizar() {
        contenido.append("========================================");
        
        try (FileWriter escritor = new FileWriter("documento.txt")) {
            escritor.write(contenido.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

package com.ejemplo.patrones.builder;

public class Prueba {

    public static void main(String[] args) {
        // Ejecución con constructor TXT
        Constructor constructorTXT = new ConstructorTXT();
        Coordinador coordinadorTXT = new Coordinador(constructorTXT);
        coordinadorTXT.construirDocumento();
        
        // Ejecución con constructor HTML
        Constructor constructorHTML = new ConstructorHTML();
        Coordinador coordinadorHTML = new Coordinador(constructorHTML);
        coordinadorHTML.construirDocumento();
    }
    
}

Resultado: se crearon dos archivos en la carpeta raíz - documento.txt y documento.html - sin errores durante la ejecución.

Etiquetas: java PatronesDeDiseño PatrónDeConstrucción POO

Publicado el 8-1 11:18