設計模式第4篇:原型設計模式
阿新 • • 發佈:2019-01-03
一.原型設計模式要解決的問題
當建立一個物件需要大量的時間和資源時,這時如果已經存在一個類似的物件,我們就應該考慮原型設計模式。原型設計模式通過拷貝一份已經存在的物件並根據自己的需要來修改該物件,該模式要求複製的物件本身需要有複製特性,它不應該被其他類去複製。java中的原型設計模式通過克隆來實現,具體通過深拷貝實現還是淺拷貝實現需要根據具體需求決定。
附一個簡單的Java程式碼例項如下:
class Employments implements Cloneable{ private List<String> empList; public Employments(){ empList=new ArrayList<String>(); } public Employments(List<String> empList){ this.empList=empList; } /*模擬從資料庫取資料並放入empList容器*/ public void loadData(){ empList.add("zhangsan"); empList.add("lisi"); empList.add("wangwu"); } public List<String> getEmpList(){return empList; }
/*此處的克隆用的是深拷貝*/ @Override public Object clone(){ ArrayList<String> list=new ArrayList<>(); for(String s:this.getEmpList()){ list.add(s); } return new Employments(list); } }
測試程式碼如下:
public class PrototypeTest{public static void main(String[] args) { Employments employments = new Employments(); employments.loadData(); Employments employmentsNew=(Employments)employments.clone(); List<String> empListNew=employmentsNew.getEmpList(); empListNew.add("test"); System.out.println("empList:"+employments.getEmpList()); System.out.println("empListNew:"+empListNew); } }
返回結果如下:
empList:[zhangsan, lisi, wangwu]
empListNew:[zhangsan, lisi, wangwu, test]