Рубрики
Без рубрики

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

Шаблон проектирования прототипа на Java. Пример прототипа шаблона. Объект шаблона проектирования прототипа должен реализовывать клонируемый метод clone() и глубокое копирование.

Автор оригинала: Pankaj Kumar.

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

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

Шаблон проектирования прототипа используется, когда создание объекта является дорогостоящим делом и требует много времени и ресурсов, а у вас уже есть аналогичный объект.

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

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

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

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

Шаблон проектирования прототипа требует, чтобы объект, который вы копируете, обеспечивал функцию копирования. Это не должно выполняться никаким другим классом. Однако, следует ли использовать мелкую или глубокую копию свойств объекта, зависит от требований и проектного решения.

Вот пример программы, показывающей пример шаблона проектирования прототипа на java.

Вот пример программы, показывающей пример шаблона проектирования прототипа на 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(){
		//read all employees from database and put into the list
		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);
	}
	
}

Обратите внимание, что метод clone переопределен для предоставления полной копии списка сотрудников.

Вот пример тестовой программы прототипа шаблона проектирования, которая покажет преимущества прототипа шаблона.

Вот пример тестовой программы прототипа шаблона проектирования, которая покажет преимущества прототипа шаблона.

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 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);
	}

}

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

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

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

Это все для шаблона проектирования прототипа в java.