Explorando los Patrones de Diseño: Factory Method, Builder, Prototype y Singleton en el Desarrollo de Software

Sebastian Velez Zuluaga
3 min readMar 5, 2024

--

En un mundo donde la tecnología avanza a pasos agigantados, es fundamental mantenerse al día con las metodologías y técnicas que modelan el desarrollo de software. Hoy te invito a explorar de manera sencilla tres patrones de diseño esenciales que todo desarrollador debería conocer: Factory Method, Builder y Prototype, incluyendo una mención especial al Singleton

Factory Method: Imagina dirigir una cadena de restaurantes, cada uno con su propia versión de una pizza. Aunque el proceso básico (preparar la masa, añadir ingredientes, hornear) es el mismo, los detalles varían según el restaurante. Aquí, el Factory Method actúa como el proceso de selección del tipo de pizza basado en el pedido del cliente, permitiendo a cada restaurante personalizar su preparación.

// Interfaz Pizzería
interfaz Pizzeria
funcion crearPizza(tipo: Cadena) retorna Pizza

// Clase Concreta PizzeriaItaliana
clase PizzeriaItaliana implementa Pizzeria
funcion crearPizza(tipo: Cadena) retorna Pizza
si tipo == "Pepperoni"
retorna nuevo PizzaPepperoniItaliana()
sino si tipo == "Vegetariana"
retorna nuevo PizzaVegetarianaItaliana()

// Clase Concreta PizzeriaAmericana
clase PizzeriaAmericana implementa Pizzeria
funcion crearPizza(tipo: Cadena) retorna Pizza
si tipo == "Pepperoni"
retorna nuevo PizzaPepperoniAmericana()
sino si tipo == "Vegetariana"
retorna nuevo PizzaVegetarianaAmericana()

// Clases Concretas de Pizza
clase PizzaPepperoniItaliana hereda Pizza
// Implementación específica

clase PizzaVegetarianaItaliana hereda Pizza
// Implementación específica

clase PizzaPepperoniAmericana hereda Pizza
// Implementación específica

clase PizzaVegetarianaAmericana hereda Pizza
// Implementación específica

// Uso
pizzeria = nuevo PizzeriaItaliana()
pizza = pizzeria.crearPizza("Pepperoni")

Builder: Considera el proceso de construcción con un set de Lego, donde se siguen pasos detallados para ensamblar diferentes estructuras usando los mismos bloques básicos. Este método guía la construcción de objetos complejos, paso a paso, similar a cómo el patrón Builder facilita la creación de objetos complejos en programació

// Constructor de Modelo Lego
clase ConstructorModeloLego
propiedad modelo = nuevo ModeloLego()

funcion construirBase()
modelo.añadirParte("Base")

funcion construirParedes()
modelo.añadirParte("Paredes")

funcion construirTecho()
modelo.añadirParte("Techo")

funcion obtenerModelo() retorna ModeloLego
retorna modelo

// Producto: ModeloLego
clase ModeloLego
propiedad partes = []

funcion añadirParte(parte)
partes.añadir(parte)

// Director
clase Director
funcion construirCasa(ConstructorModeloLego constructor)
constructor.construirBase()
constructor.construirParedes()
constructor.construirTecho()

// Uso
constructor = nuevo ConstructorModeloLego()
director = nuevo Director()
director.construirCasa(constructor)
modeloCasaLego = constructor.obtenerModelo()

Prototype: Piensa en hacer fotocopias de un documento en lugar de escribirlo de nuevo cada vez que necesitas una copia. Este enfoque no solo ahorra tiempo sino que asegura uniformidad entre las copias. En programación, el patrón Prototype replica objetos rápidamente, manteniendo la eficiencia y consistencia.

// Clase Prototipo de Documento
clase Documento
propiedad texto

// Constructor
funcion inicializar(texto)
self.texto = texto

// Método clonar
funcion clonar() retorna Documento
// Crear una nueva instancia de Documento con el mismo texto
retorna nuevo Documento(self.texto)

// Uso del patrón Prototipo
documentoOriginal = nuevo Documento("Este es el documento original.")
documentoClonado = documentoOriginal.clonar()

// Modificar el clon si es necesario
documentoClonado.texto = "Texto modificado del clon."

Singleton: Imagina una oficina con una única impresora compartida por todos. Independientemente de cuál computadora envíe el trabajo de impresión, siempre se utiliza la misma impresora. Este escenario ilustra el patrón Singleton, optimizando el uso de recursos al compartir una única instancia entre múltiples usuarios.

// Clase Singleton
clase Impresora
privado estatico instancia: Impresora = null

// Constructor privado para evitar instanciación externa
privado funcion Impresora() {}

// Método estático público para obtener la instancia
publico estatico funcion obtenerInstancia() retorna Impresora
si instancia == null
instancia = nuevo Impresora()
retorna instancia

Este artículo te abre las puertas al fascinante mundo de los patrones de diseño, proporcionándote un entendimiento claro y práctico de cómo pueden aplicarse en el desarrollo de software. Espero que esta exploración te anime a profundizar aún más en estos conceptos fundamentales.

Coocreadro con Chatgpt.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response