Patrón de diseño Prototipo en Java

El patrón de diseño de prototipo es uno de los patrones de diseño de creación, por lo que proporciona un mecanismo de creación de objetos.

Patrón de diseño de prototipo

El patrón de diseño de prototipo se utiliza cuando la creación de objetos es costosa y requiere mucho tiempo y recursos, y ya tienes un objeto similar existente. El patrón de prototipo proporciona un mecanismo para copiar el objeto original a un nuevo objeto y luego modificarlo según nuestras necesidades. El patrón de diseño de prototipo utiliza la clonación en Java para copiar el objeto.

Ejemplo de patrón de diseño de prototipo

Sería fácil entender el patrón de diseño de prototipo con un ejemplo. Supongamos que tenemos un objeto que carga datos de una base de datos. Ahora necesitamos modificar estos datos en nuestro programa varias veces, por lo que no es una buena idea crear el objeto usando la palabra clave new y cargar todos los datos nuevamente desde la base de datos. El enfoque más adecuado sería clonar el objeto existente en un nuevo objeto y luego realizar la manipulación de datos. El patrón de diseño de prototipo establece que el objeto que estás copiando debe proporcionar la función de copia. No debería ser realizado por ninguna otra clase. Sin embargo, la decisión de usar una copia superficial o profunda de las propiedades del objeto depende de los requisitos y es una decisión de diseño. Aquí hay un programa de ejemplo que muestra un ejemplo del patrón de diseño de prototipo en Java. Employees.java

package com.journaldev.design.prototype;

import java.util.ArrayList;
import java.util.List;

public class Employees implements Cloneable{

	private List empList;
	
	public Employees(){
		empList = new ArrayList();
	}
	
	public Employees(List list){
		this.empList=list;
	}
	public void loadData(){
		// leer todos los empleados de la base de datos y ponerlos en la lista
		empList.add("Pankaj");
		empList.add("Raj");
		empList.add("David");
		empList.add("Lisa");
	}
	
	public List getEmpList() {
		return empList;
	}

	@Override
	public Object clone() throws CloneNotSupportedException{
			List temp = new ArrayList();
			for(String s : this.getEmpList()){
				temp.add(s);
			}
			return new Employees(temp);
	}
	
}

Observa que el método clone está sobrescrito para proporcionar una copia profunda de la lista de empleados. Aquí hay un programa de prueba del ejemplo del patrón de diseño de prototipo que mostrará el beneficio del patrón de prototipo. PrototypePatternTest.java

package com.journaldev.design.test;

import java.util.List;

import com.journaldev.design.prototype.Employees;

public class PrototypePatternTest {

	public static void main(String[] args) throws CloneNotSupportedException {
		Employees emps = new Employees();
		emps.loadData();
		
		// Utilizar el método clone para obtener el objeto Employee
		Employees empsNew = (Employees) emps.clone();
		Employees empsNew1 = (Employees) emps.clone();
		List list = empsNew.getEmpList();
		list.add("John");
		List list1 = empsNew1.getEmpList();
		list1.remove("Pankaj");
		
		System.out.println("emps List: "+emps.getEmpList());
		System.out.println("empsNew List: "+list);
		System.out.println("empsNew1 List: "+list1);
	}

}

La salida del programa de ejemplo del patrón de diseño de prototipo anterior es:

emps List: [Pankaj, Raj, David, Lisa]
empsNew List: [Pankaj, Raj, David, Lisa, John]
empsNew1 List: [Raj, David, Lisa]

Si no se proporcionara la clonación de objetos, tendríamos que hacer una llamada a la base de datos para obtener la lista de empleados cada vez. Luego realizar las manipulaciones que serían costosas en términos de recursos y tiempo. Eso es todo para el patrón de diseño de prototipo en Java.

Source:
https://www.digitalocean.com/community/tutorials/prototype-design-pattern-in-java