原型模式(Prototype Pattern):使用原型實例指定創建對象的種類,并且通過克隆這些原型創建新的對象。原型模式是一種對象創建型模式。原型模式其實就是從一個對象再創建另外一個可定制的對象,而且不需知道任何創建的細節。
這個可以省略new的過程,不需要重新執行構造函數。
?淺復制與深復制
淺復制’,被復制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用都仍然指向原來的對象。深復制把引用對象的變量指向復制過的新對象,而不是原有的被引用的對象。”對于引用類型的數據,比如類或者引用,會將原型生成的新實例指向被復制的實例,新舊實例的引用類型數據指向的是同一個。
// 原型接口
public interface Prototype {// 克隆方法Prototype clone();
}// 具體原型類
public class ConcretePrototype implements Prototype {private String name;public ConcretePrototype(String name) {this.name = name;}public String getName() {return name;}// 實現克隆方法@Overridepublic ConcretePrototype clone() {try {// 使用淺拷貝return (ConcretePrototype) super.clone();} catch (CloneNotSupportedException e) {throw new Error("Clone not supported");}}
}// 客戶端代碼
public class Client {public static void main(String[] args) {// 創建原型對象Prototype prototype = new ConcretePrototype("Prototype 1");// 克隆原型對象Prototype clonedPrototype = prototype.clone();// 修改克隆對象的屬性clonedPrototype.getName(); // 輸出 "Prototype 1"// 原型對象屬性沒有改變prototype.getName(); // 輸出 "Prototype 1"// 如果需要深拷貝,則需要在 clone 方法中手動復制所有需要深拷貝的字段}
}
實現深拷貝(大話設計模式中)
工作經歷類是簡歷類的成員變量,此為實現工作經歷類的深拷貝
1、工作經歷類實現克隆方法
2、簡歷類創建參數為工作經歷類的構造函數,構造函數中克隆工作經歷類
3、在簡歷類克隆方法中,通過先初始化工作簡歷類的構造方法創建新的簡歷類,再復制其它值類參數,最終返回深拷貝的簡歷類
?