Padrão de design de protótipo é um dos padrões de design de criação, portanto, ele fornece um mecanismo de criação de objetos.
Padrão de Design de Protótipo
O padrão de design de protótipo é usado quando a criação de objetos é uma operação custosa e requer muito tempo e recursos, e você já tem um objeto semelhante existente. O padrão de design de protótipo fornece um mecanismo para copiar o objeto original para um novo objeto e, em seguida, modificá-lo de acordo com nossas necessidades. O padrão de design de protótipo utiliza a clonagem em Java para copiar o objeto.
Exemplo de Padrão de Design de Protótipo
Seria fácil entender o padrão de design de protótipo com um exemplo. Suponha que tenhamos um Objeto que carrega dados do banco de dados. Agora precisamos modificar esses dados em nosso programa várias vezes, então não é uma boa ideia criar o Objeto usando a palavra-chave new
e carregar todos os dados novamente do banco de dados. A abordagem melhor seria clonar o objeto existente em um novo objeto e então fazer a manipulação dos dados. O padrão de design de protótipo exige que o Objeto que você está copiando forneça a funcionalidade de cópia. Isso não deve ser feito por nenhuma outra classe. No entanto, se deve usar uma cópia superficial ou profunda das propriedades do Objeto depende dos requisitos e é uma decisão de design. Aqui está um programa de exemplo mostrando o padrão de design de protótipo em 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(){
//ler todos os funcionários do banco de dados e colocá-los na 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);
}
}
Observe que o método clone
é sobrescrito para fornecer uma cópia profunda da lista de funcionários. Aqui está o programa de teste de exemplo do padrão de design de protótipo que mostrará o benefício do padrão de protótipo. 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();
//Usar o método clone para obter o 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);
}
}
A saída do programa de exemplo acima do padrão de design de protótipo é:
emps List: [Pankaj, Raj, David, Lisa]
empsNew List: [Pankaj, Raj, David, Lisa, John]
empsNew1 List: [Raj, David, Lisa]
Se a clonagem do objeto não tivesse sido fornecida, teríamos que fazer uma chamada ao banco de dados para buscar a lista de funcionários toda vez. Em seguida, fazer as manipulações que teriam sido demoradas e consumidoras de recursos. Isso é tudo para o padrão de design de protótipo em Java.
Source:
https://www.digitalocean.com/community/tutorials/prototype-design-pattern-in-java