代碼示例: 1 package com.shejimoshi.create.Prototype; 2 3 4 /** 5 * 功能:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象 6 * 適用:當一個系統應該獨立於她得產品創建、構成和表示時,要使用Prototype模式 7 * 實例
代碼示例:
1 package com.shejimoshi.create.Prototype; 2 3 4 /** 5 * 功能:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象 6 * 適用:當一個系統應該獨立於她得產品創建、構成和表示時,要使用Prototype模式 7 * 實例化的類是在運行時刻指定的 8 * 避免創建一個與產品類層次平行的工廠類層次時 9 * 當一個類的實例只能有幾個不同狀態組合中的一種的時候 10 * 時間:2016年2月14日下午7:27:39 11 * 作者:cutter_point 12 */ 13 public interface Prototype 14 { 15 //克隆自己 16 public Prototype Clone(); 17 public void display(); 18 }
實現介面:
1 package com.shejimoshi.create.Prototype; 2 3 4 /** 5 * 功能:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象 6 * 適用:當一個系統應該獨立於她得產品創建、構成和表示時,要使用Prototype模式 7 * 實例化的類是在運行時刻指定的 8 * 避免創建一個與產品類層次平行的工廠類層次時 9 * 當一個類的實例只能有幾個不同狀態組合中的一種的時候 10 * 時間:2016年2月14日下午7:32:27 11 * 作者:cutter_point 12 */ 13 public class Prototype1 implements Prototype 14 { 15 private String name; 16 private int id; 17 18 //構造函數 19 public Prototype1(String name, int id) 20 { 21 this.name = name; 22 this.id =id; 23 } 24 25 //拷貝構造函數 26 public Prototype1(Prototype1 p1) 27 { 28 this.name = p1.name; 29 this.id = p1.id; 30 } 31 32 @Override 33 public Prototype Clone() 34 { 35 //拷貝自己,深拷貝還是淺拷貝,在我們的拷貝構造函數中定義 36 return new Prototype1(this); 37 } 38 39 @Override 40 public void display() 41 { 42 System.out.println("Prototype1的名字和id是:" + this.name + " : " + this.id); 43 } 44 45 }
1 package com.shejimoshi.create.Prototype; 2 3 4 /** 5 * 功能:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象 6 * 適用:當一個系統應該獨立於她得產品創建、構成和表示時,要使用Prototype模式 7 * 實例化的類是在運行時刻指定的 8 * 避免創建一個與產品類層次平行的工廠類層次時 9 * 當一個類的實例只能有幾個不同狀態組合中的一種的時候 10 * 時間:2016年2月14日下午7:36:23 11 * 作者:cutter_point 12 */ 13 public class Prototype2 implements Prototype 14 { 15 private String name; 16 private int id; 17 18 //構造函數 19 public Prototype2(String name, int id) 20 { 21 this.name = name; 22 this.id =id; 23 } 24 25 //拷貝構造函數 26 public Prototype2(Prototype2 p2) 27 { 28 this.name = p2.name; 29 this.id = p2.id; 30 } 31 32 @Override 33 public Prototype Clone() 34 { 35 //拷貝自己,深拷貝還是淺拷貝,在我們的拷貝構造函數中定義 36 return new Prototype2(this); 37 } 38 39 @Override 40 public void display() 41 { 42 System.out.println("Prototype2的名字和id是:" + this.name + " : " + this.id); 43 } 44 }
客戶端,測試代碼:
1 package com.shejimoshi.create.Prototype; 2 3 4 /** 5 * 功能:客戶端程式測試 6 * 時間:2016年2月14日下午7:37:27 7 * 作者:cutter_point 8 */ 9 public class Test 10 { 11 public static void main(String args[]) 12 { 13 Prototype obj1 = new Prototype1("cutter", 1); 14 Prototype obj2 = obj1.Clone(); 15 Prototype obj3 = obj2.Clone(); 16 17 obj1.display(); 18 obj2.display(); 19 obj3.display(); 20 21 //類似的第二個對象 22 Prototype obj4 = new Prototype2("point", 2); 23 Prototype obj5 = obj4.Clone(); 24 Prototype obj6 = obj5.Clone(); 25 26 obj4.display(); 27 obj5.display(); 28 obj6.display(); 29 30 } 31 }
輸出結果:
Prototype1的名字和id是:cutter : 1 Prototype1的名字和id是:cutter : 1 Prototype1的名字和id是:cutter : 1 Prototype2的名字和id是:point : 2 Prototype2的名字和id是:point : 2 Prototype2的名字和id是:point : 2