Introducción
El patrón Prototype es un patrón de diseño creacional que permite la creación de nuevos objetos copiando un objeto existente, conocido como prototipo. Este patrón es útil cuando la creación de una instancia de una clase es costosa o compleja. En lugar de crear una nueva instancia desde cero, se clona un objeto existente.
Conceptos Clave
- Prototipo: El objeto que se va a clonar.
- Clonación: El proceso de crear una copia exacta del prototipo.
- Shallow Copy (Copia Superficial): Copia los valores de los atributos del objeto original al nuevo objeto. Si los atributos son referencias a otros objetos, solo se copia la referencia.
- Deep Copy (Copia Profunda): Copia los valores de los atributos del objeto original al nuevo objeto, y si los atributos son referencias a otros objetos, también se crean copias de esos objetos.
Ejemplo Práctico
Imaginemos que estamos desarrollando un sistema de gestión de documentos. Cada documento tiene varias propiedades y puede ser costoso crear un nuevo documento desde cero. En su lugar, podemos clonar un documento existente y modificarlo según sea necesario.
Implementación en Python
import copy class Document: def __init__(self, title, content, author): self.title = title self.content = content self.author = author def clone(self): return copy.deepcopy(self) def __str__(self): return f"Document: {self.title}, Author: {self.author}\nContent: {self.content}" # Crear un documento original original_document = Document("Prototype Pattern", "This is a document about the Prototype pattern.", "John Doe") # Clonar el documento original cloned_document = original_document.clone() # Modificar el documento clonado cloned_document.title = "Cloned Prototype Pattern" cloned_document.author = "Jane Doe" print("Original Document:") print(original_document) print("\nCloned Document:") print(cloned_document)
Explicación del Código
- Clase Document: Define un documento con atributos
title
,content
yauthor
. - Método clone: Utiliza
copy.deepcopy
para crear una copia profunda del documento. - Creación y Clonación: Se crea un documento original y luego se clona. El documento clonado se modifica sin afectar al original.
Ejercicio Práctico
Ejercicio 1
Implementa el patrón Prototype para una clase Car
que tenga los atributos make
, model
y year
. Crea un objeto Car
, clónalo y modifica algunos de sus atributos.
Solución
import copy class Car: def __init__(self, make, model, year): self.make = make self.model = model self.year = year def clone(self): return copy.deepcopy(self) def __str__(self): return f"Car: {self.make} {self.model}, Year: {self.year}" # Crear un coche original original_car = Car("Toyota", "Corolla", 2020) # Clonar el coche original cloned_car = original_car.clone() # Modificar el coche clonado cloned_car.model = "Camry" cloned_car.year = 2021 print("Original Car:") print(original_car) print("\nCloned Car:") print(cloned_car)
Ejercicio 2
Implementa una clase Employee
con atributos name
, position
y salary
. Crea un método clone
que realice una copia profunda del objeto Employee
. Crea un objeto Employee
, clónalo y modifica algunos de sus atributos.
Solución
import copy class Employee: def __init__(self, name, position, salary): self.name = name self.position = position self.salary = salary def clone(self): return copy.deepcopy(self) def __str__(self): return f"Employee: {self.name}, Position: {self.position}, Salary: {self.salary}" # Crear un empleado original original_employee = Employee("Alice", "Developer", 70000) # Clonar el empleado original cloned_employee = original_employee.clone() # Modificar el empleado clonado cloned_employee.name = "Bob" cloned_employee.position = "Manager" cloned_employee.salary = 90000 print("Original Employee:") print(original_employee) print("\nCloned Employee:") print(cloned_employee)
Resumen
En esta sección, hemos aprendido sobre el patrón de diseño Prototype, que permite crear nuevos objetos clonando un objeto existente. Hemos visto cómo implementar este patrón en Python y hemos practicado con ejercicios para reforzar los conceptos aprendidos. Este patrón es especialmente útil cuando la creación de una instancia es costosa o compleja, y se necesita una copia exacta del objeto existente.
Curso de Patrones de Diseño de Software
Módulo 1: Introducción a los Patrones de Diseño
- ¿Qué son los Patrones de Diseño?
- Historia y Origen de los Patrones de Diseño
- Clasificación de los Patrones de Diseño
- Ventajas y Desventajas de Usar Patrones de Diseño
Módulo 2: Patrones Creacionales
- Introducción a los Patrones Creacionales
- Singleton
- Factory Method
- Abstract Factory
- Builder
- Prototype
Módulo 3: Patrones Estructurales
Módulo 4: Patrones de Comportamiento
- Introducción a los Patrones de Comportamiento
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Módulo 5: Aplicación de Patrones de Diseño
- Cómo Seleccionar el Patrón Adecuado
- Ejemplos Prácticos de Uso de Patrones
- Patrones de Diseño en Proyectos Reales
- Refactorización Usando Patrones de Diseño
Módulo 6: Patrones de Diseño Avanzados
- Patrones de Diseño en Arquitecturas Modernas
- Patrones de Diseño en Microservicios
- Patrones de Diseño en Sistemas Distribuidos
- Patrones de Diseño en Desarrollo Ágil