Prototype – Patrones de Diseño
Antonio Leiva

El patrón de diseño Prototype es un patrón creacional que se utiliza para crear nuevos objetos a partir de objetos ya existentes.

Este patrón se utiliza cuando el proceso de creación de un nuevo objeto puede ser costoso o complicado, ya sea porque el objeto es complejo o porque se requieren muchos pasos para crearlo.

En lugar de crear un nuevo objeto desde cero, el patrón Prototype permite crear una copia de un objeto ya existente, modificarla según sea necesario y devolver la copia como el nuevo objeto.

Un ejemplo de cómo se puede utilizar el patrón Prototype en Kotlin es la creación de una aplicación de dibujo.

Supongamos que en nuestra aplicación tenemos diferentes tipos de figuras geométricas, como círculos, cuadrados y triángulos, y que cada una de estas figuras tiene diferentes propiedades, como su posición en la pantalla, su tamaño y su color.

Cuando un usuario de la aplicación quiere dibujar una nueva figura en la pantalla, podemos utilizar el patrón Prototype para crear una copia de una figura ya existente y modificar sus propiedades para que se ajusten a lo que el usuario ha solicitado.

Para implementar el patrón Prototype en Kotlin, necesitamos crear una interfaz Prototype que defina un método clone() para crear una copia de un objeto.

Luego, cada una de las figuras geométricas de nuestra aplicación de dibujo debe implementar esta interfaz y proporcionar una implementación para el método clone().

Por ejemplo, nuestra clase Circle podría tener la siguiente implementación:

class Circle(var x: Int, var y: Int, var radius: Int, var color: String): Prototype {
    override fun clone(): Circle {
        return Circle(x, y, radius, color)
    }
}

En este caso, el método clone() simplemente devuelve una nueva instancia de la clase Circle con las mismas propiedades que el objeto original. Luego, para crear una nueva figura basada en una figura existente, podemos utilizar el método clone() de esta manera:

val circle1 = Circle(10, 10, 5, "red")
val circle2 = circle1.clone()

En este ejemplo, primero creamos un círculo rojo en la posición (10, 10) con un radio de 5. Luego, creamos una copia de este

círculo utilizando el método clone() y almacenamos la copia en la variable circle2. Ahora, podemos modificar las propiedades de circle2 para que se ajusten a lo que el usuario ha solicitado, como cambiar su posición en la pantalla o su color.

Otro ejemplo de cómo se puede utilizar el patrón Prototype en Kotlin es en el contexto de una aplicación de sistema de archivos.

Supongamos que nuestra aplicación permite a los usuarios crear y modificar archivos y carpetas en un sistema de archivos virtual.

En lugar de tener que crear un nuevo archivo o carpeta desde cero cada vez que un usuario lo solicita, podemos utilizar el patrón Prototype para crear una copia de un archivo o carpeta ya existente y modificarla según sea necesario.

Para implementar el patrón Prototype en este contexto, podemos utilizar la misma interfaz Prototype que definimos anteriormente, pero en este caso necesitamos tener una clase File y una clase Folder que implementen esta interfaz. La clase File podría tener una implementación similar a la siguiente:

class File(var name: String, var content: String): Prototype {
    override fun clone(): File {
        return File(name, content)
    }
}

En este caso, el método clone() devuelve una nueva instancia de la clase File con las mismas propiedades que el objeto original.

Luego, para crear una copia de un archivo existente, podemos utilizar el método clone() de esta manera:

val file1 = File("file1.txt", "This is the content of file1.txt")
val file2 = file1.clone()

En este ejemplo, primero creamos un archivo con el nombre «file1.txt» y el contenido «This is the content of file1.txt». Luego, creamos una copia de este archivo utilizando el método clone() y almacenamos la copia en la variable file2. Ahora, podemos modificar las propiedades de file2, como su nombre o su contenido, para que se ajusten a lo que el usuario ha solicitado.

En resumen, el patrón Prototype es un patrón creacional que se utiliza para crear nuevos objetos a partir de objetos ya existentes.

Este patrón se utiliza cuando el proceso de creación de un nuevo objeto puede ser costoso o complicado, ya sea porque el objeto es complejo o porque se requieren muchos pasos para crearlo. En Kotlin, podemos implementar el patrón Prototype mediante la definición de una interfaz Prototype con un método clone() y la implementación de esta interfaz en las clases que deseemos utilizar con este patrón. Luego, podemos utilizar el método clone() para crear una copia de un objeto existente y modificarla según sea necesario.

El patrón Prototype nos permite ahorrar tiempo y esfuerzo en la creación de nuevos objetos, ya que nos permite utilizar objetos ya existentes como base para crear las copias.

Quizá también te interese…

Las reglas FIRST de los tests

Las reglas FIRST de los tests

Las reglas FIRST son un conjunto de principios que se utilizan para diseñar y escribir tests de software de manera efectiva. Las siglas FIRST significan: F - Fast: Un test debe ser rápido de ejecutar. I - Independent: Un test debe ser independiente de otros tests y...

¿Qué son los dobles de test?

¿Qué son los dobles de test?

Los dobles de prueba (también conocidos como "doubles" o "fakes") son herramientas comunes en la programación y en particular en el testing de software. Se utilizan para simular el comportamiento de una dependencia de una aplicación en un entorno de pruebas, sin tener...

Kata del TicTacToe en Kotlin

Kata del TicTacToe en Kotlin

Escribe el código para representar una entidad que almacene el tablero de juego del 3 en raya, y que además tenga: Un método move() con 2 parámetros, fila y columna, que permita añadir un movimiento al tablero Un método findWinner(), que devuelva el ganador (X, Y o...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *