Prototype es un patrón de diseño creacional que permite la clonación de objetos, incluso los complejos, sin acoplarse a sus clases específicas.
Todas las clases prototipo deben tener una interfaz común que haga posible copiar objetos incluso si sus clases concretas son desconocidas. Los objetos prototipo pueden producir copias completas, ya que los objetos de la misma clase pueden acceder a los campos privados de los demás.
Vamos a intentar imaginar el patrón Prototype utilizando un ejemplo basado en el sistema de archivos del sistema operativo. El sistema de archivos del SO es recursivo: las carpetas contienen archivos y carpetas, que también pueden incluir archivos y carpetas, y así sucesivamente.
Cada archivo y carpeta puede representarse por una interfaz inode. La interfaz inode incluye también la función clone.
Las estructuras file y folder implementan las funciones print y clone, ya que son del tipo inode. Observa también la función clone tanto en file como en folder. La función clone en ambas devuelve una copia del archivo o la carpeta respectivos. Durante la clonación, añadimos la palabra clave “_clone” para el campo del nombre.