原型設計模式是創建型設計模式之一,因此它提供了對象創建的機制。
原型設計模式
當對象創建是一項昂貴的事情,需要大量時間和資源,並且您已經存在一個類似的對象時,就會使用原型模式。原型模式提供了將原始對象複製到新對象,然後根據我們的需求修改它的機制。原型設計模式使用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