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

  1. Clase Document: Define un documento con atributos title, content y author.
  2. Método clone: Utiliza copy.deepcopy para crear una copia profunda del documento.
  3. 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.

© Copyright 2024. Todos los derechos reservados