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,contentyauthor. - Método clone: Utiliza
copy.deepcopypara 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
