Поиск по сайту:

Шаблон проектирования прототипа в Java


Шаблон проектирования прототипа является одним из шаблонов креационного дизайна, поэтому он обеспечивает механизм создания объектов.

Шаблон проектирования прототипа

Пример шаблона проектирования прототипа

Было бы легко понять шаблон проектирования прототипа на примере. Предположим, у нас есть объект, который загружает данные из базы данных. Теперь нам нужно изменить эти данные в нашей программе несколько раз, поэтому не рекомендуется создавать объект с использованием ключевого слова new и снова загружать все данные из базы данных. Лучшим подходом было бы клонировать существующий объект в новый объект, а затем выполнять манипуляции с данными. Шаблон проектирования прототипа требует, чтобы объект, который вы копируете, предоставлял функцию копирования. Это не должно быть сделано никаким другим классом. Однако использование мелкой или глубокой копии свойств объекта зависит от требований и проектного решения. Вот пример программы, показывающий пример шаблона проектирования прототипа в java. Сотрудники.java

package com.journaldev.design.prototype;

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

public class Employees implements Cloneable{

	private List<String> empList;
	
	public Employees(){
		empList = new ArrayList<String>();
	}
	
	public Employees(List<String> list){
		this.empList=list;
	}
	public void loadData(){
		//read all employees from database and put into the list
		empList.add("Pankaj");
		empList.add("Raj");
		empList.add("David");
		empList.add("Lisa");
	}
	
	public List<String> getEmpList() {
		return empList;
	}

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

Обратите внимание, что метод clone переопределен для предоставления полной копии списка сотрудников. Вот пример тестовой программы шаблона проектирования прототипа, которая продемонстрирует преимущества шаблона прототипа. 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();
		
		//Use the clone method to get the Employee object
		Employees empsNew = (Employees) emps.clone();
		Employees empsNew1 = (Employees) emps.clone();
		List<String> list = empsNew.getEmpList();
		list.add("John");
		List<String> 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);
	}

}

Вывод приведенной выше программы примера шаблона проектирования прототипа:

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

Если клонирование объекта не было предусмотрено, нам придется каждый раз обращаться к базе данных для получения списка сотрудников. Затем проделайте манипуляции, которые потребовали бы ресурсов и времени. Это все, что касается шаблона проектирования прототипа в java.