Шаблон проектирования прототипа – это один из шаблонов создания объектов, поэтому он предоставляет механизм создания объекта.
Шаблон проектирования прототипа
Шаблон проектирования прототипа используется, когда создание объекта является затратным и требует много времени и ресурсов, а у вас уже есть похожий объект. Шаблон прототипа предоставляет механизм копирования оригинального объекта в новый объект, а затем изменения его в соответствии с нашими потребностями. Шаблон проектирования прототипа использует клонирование в Java для копирования объекта.
Пример шаблона проектирования прототипа
Было бы легко понять паттерн проектирования прототипа на примере. Предположим, у нас есть объект, который загружает данные из базы данных. Теперь нам нужно изменить эти данные в нашей программе несколько раз, поэтому создавать объект с использованием ключевого слова new
и снова загружать все данные из базы данных не очень хорошая идея. Лучшим подходом будет клонировать существующий объект в новый объект, а затем выполнять манипуляции с данными. Паттерн проектирования прототипа требует, чтобы объект, который вы копируете, предоставлял возможность копирования. Это не должно делаться любым другим классом. Однако решение о том, использовать поверхностное или глубокое копирование свойств объекта, зависит от требований, и это решение дизайна. Вот пример программы, демонстрирующий паттерн проектирования прототипа на языке 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(){
//считывает всех сотрудников из базы данных и помещает их в список
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
переопределен для предоставления глубокой копии списка сотрудников. Вот пример тестовой программы для паттерна проектирования прототипа, который покажет преимущества этого паттерна. 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();
//Используйте метод clone для получения объекта 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);
}
}
Результатом вышеуказанной программы примера паттерна проектирования прототипа является:
emps List: [Pankaj, Raj, David, Lisa]
empsNew List: [Pankaj, Raj, David, Lisa, John]
empsNew1 List: [Raj, David, Lisa]
Если бы клонирование объектов не было предусмотрено, нам пришлось бы делать вызов базы данных для получения списка сотрудников каждый раз. Затем выполнить манипуляции, которые были бы затратными по ресурсам и времени. Вот и все для паттерна проектирования прототипа на языке Java.
Source:
https://www.digitalocean.com/community/tutorials/prototype-design-pattern-in-java