Modello di Progettazione Prototipo in Java

Il modello di progettazione del prototipo è uno dei modelli di progettazione creazionale, quindi fornisce un meccanismo di creazione dell’oggetto.

Modello di Progettazione del Prototipo

Il modello di progettazione del prototipo viene utilizzato quando la creazione dell’oggetto è un’operazione costosa e richiede molto tempo e risorse, e si dispone già di un oggetto simile esistente. Il modello di progettazione del prototipo fornisce un meccanismo per copiare l’oggetto originale in un nuovo oggetto e quindi modificarlo secondo le nostre esigenze. Il modello di progettazione del prototipo utilizza il cloning in Java per copiare l’oggetto.

Esempio di Modello di Progettazione del Prototipo

Sarebbe facile capire il pattern di progettazione del prototipo con un esempio. Supponiamo di avere un Oggetto che carica dati dal database. Ora abbiamo bisogno di modificare questi dati nel nostro programma più volte, quindi non è una buona idea creare l’Oggetto usando la parola chiave new e caricare tutti i dati nuovamente dal database. L’approccio migliore sarebbe clonare l’oggetto esistente in un nuovo oggetto e quindi manipolare i dati. Il pattern di progettazione del prototipo impone che l’Oggetto che si sta copiando fornisca la funzione di copia. Non dovrebbe essere fatto da nessun’altra classe. Tuttavia, se utilizzare una copia superficiale o profonda delle proprietà dell’Oggetto dipende dai requisiti ed è una decisione di progettazione. Ecco un programma di esempio che mostra l’esempio del pattern di progettazione del prototipo in 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(){
		//leggi tutti i dipendenti dal database e mettili nella 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);
	}
	
}

Nota che il metodo clone è sovrascritto per fornire una copia profonda della lista dei dipendenti. Ecco il programma di test dell’esempio del pattern di progettazione del prototipo che mostrerà il beneficio del pattern del 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();
		
		//Usa il metodo clone per ottenere l'oggetto 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);
	}

}

Output del programma di esempio del pattern di progettazione del prototipo sopra è:

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

Se la clonazione dell’oggetto non fosse stata fornita, avremmo dovuto fare una chiamata al database per recuperare l’elenco dei dipendenti ogni volta. Poi fare le manipolazioni che sarebbero state dispendiose in termini di risorse e tempo. Questo è tutto per il pattern di progettazione del prototipo in Java.

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