模式動機
原型模式(Prototype Pattern)結構較為簡單,它是一種特殊的創建型模式,當需要創建大量相同或者相似物件時,可以通過對一個已有物件的復制獲取更多物件,Java語言提供了較為簡單的原型模式解決方案,只需要創建一個原型物件,然后通過在類中定義的克隆方法復制自己,該模式應用較為廣泛,可以快速生成大量的相似物件,極大提高了創建新實體的效率,
總結一下就是
- 復制一個物件,從而克隆出多個與原型物件一模一樣的物件
- 有些物件的創建程序較為復雜,而且需要頻繁創建
- 通過給出一個原型物件來指明所要創建的物件的型別,然后用復制這個原型物件的辦法創建出更多同型別的物件
模式定義
- 原型模式是一種物件創建型模式,用原型實體指定創建物件的種類,并且通過復制這些原型創建新的物件,
- 原型模式允許通過一個原型物件創建一個或多個同型別的其他物件,而無須知道任何創建的細節
作業原理
模式結構

模式分析
- 淺克隆(Shallow Clone):當原型物件被復制時,只復制它本身和其中包含的值型別的成員變數,而參考型別的成員變數并沒有復制
- 深克隆(Deep Clone):除了物件本身被復制外,物件所包含的所有成員變數也將被復制
-
原型模式優點
- 簡化物件的創建程序,通過復制一個已有實體可以提高新實體的創建效率
- 擴展性較好
- 簡化創建結構,原型模式中產品的復制是通過封裝在原型類中的克隆方法實作的,無須專門的工廠類來創建產品
- 可以使用深克隆的方式保存物件的狀態,以便在需要的時候使用,可輔助實作撤銷操作
-
原型模式缺點
- 需要為每一個類配備一個克隆方法,而且該克隆方法位于一個類的內部,當對已有的類進行改造時,需要修改源代碼,違背了開閉原則,
- 在實作深克隆時需要撰寫較為復雜的代碼,而且當物件之間存在多重的嵌套參考時,為了實作深克隆,每一層物件對應的類都必須支持深克隆,實作起來可能會比較麻煩,
-
使用情形
- 創建新物件成本較大,新物件可以通過復制已有物件來獲得,如果是相似物件,則可以對其成員變數稍作修改
- 系統要保存物件的狀態,而物件的狀態變化很小
- 需要避免使用分層次的工廠類來創建分層次的物件
擴展
原型管理器(Prototype Manager)將多個原型物件存盤在一個集合中供客戶端使用,它是一個專門負責克隆物件的工廠,其中定義了一個集合用于存盤原型物件,如果需要某個原型物件的一個克隆,可以通過復制集合中對應的原型物件來獲得,
原型管理器中針對抽象型別編程,以便擴展,
原型管理器類
public class PrototypeManager {
private Hashtable prototypeTable=new Hashtable(); //Hashtable存盤原型物件
public PrototypeManager() {
prototypeTable.put("A", new ConcretePrototypeA());
prototypeTable.put("B", new ConcretePrototypeB());
}
public void add(String key, Prototype prototype) {
prototypeTable.put(key,prototype);
}
public Prototype get(String key) {
Prototype clone = null;
clone = ((Prototype)prototypeTable.get(key)).clone(); //克隆方法創建新物件
return clone;
}
}
本文來自博客園,作者:街酒,轉載請注明原文鏈接:https://www.cnblogs.com/sorrymine/p/17389531.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/552159.html
標籤:設計模式
下一篇:返回列表
