Java 中的原型设计模式
原型设计模式是创建型设计模式之一,因此它提供了一种对象创建的机制。
原型设计模式
当对象创建成本高昂且需要大量时间和资源,并且您已经有一个类似的对象时,使用原型设计模式。原型模式提供了一种将原始对象复制到新对象,然后根据我们的需要对其进行修改的机制。原型设计模式使用 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<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 中的原型设计模式的全部内容。