基本介紹
原型模式(prototype 模式)是指:用原型例項指定建立物件的種類,並且通過拷貝這些原型,建立新的物件
原型模式是一種建立型設計模式,允許乙個物件再建立另外乙個可定製的物件,無需知道如何建立的細節
工作原理是:通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型物件拷貝它們自己來實施建立,即 物件.clone()
形象的理解:孫大聖拔出猴毛, 變出其它孫大聖
原理結構圖說明
prototype : 原型類,宣告乙個轉殖自己的介面
concreteprototype: 具體的原型類, 實現乙個轉殖自己的操作
client: 讓乙個原型物件轉殖自己,從而建立乙個新的物件(屬性一樣)
//轉殖該例項,使用預設的clone方法來完成
@override
protected object clone()
catch
(exception e)
// todo auto-generated method stub
return sheep;
}
淺拷貝的介紹
對於資料型別是基本資料型別的成員變數,淺拷貝會直接進行值傳遞,也就是將該屬性值複製乙份給新的物件。
對於資料型別是引用資料型別的成員變數,比如說成員變數是某個陣列、某個類的物件等,那麼淺拷貝會進行引用傳遞,也就是只是將該成員變數的引用值(記憶體位址)複製乙份給新的物件。因為實際上兩個物件的該成員變數都指向同乙個例項。在這種情況下,在乙個物件中修改該成員變數會影響到另乙個物件的該成員變數值
前面我們轉殖羊就是淺拷貝
淺拷貝是使用預設的 clone()方法來實現sheep = (sheep) super.clone();
深拷貝基本介紹
複製物件的所有基本資料型別的成員變數值
為所有引用資料型別的成員變數申請儲存空間,並複製每個引用資料型別成員變
量所引用的物件,直到該物件可達的所有物件。也就是說,物件進行深拷貝要對
整個物件進行拷貝
深拷貝實現方式1:重寫clone方法來實現深拷貝
//深拷貝 - 方式 1 使用clone 方法
@override
protected object clone()
throws clonenotsupportedexception
//深拷貝 - 方式2 通過物件的序列化實現 (推薦)
public object deepclone()
catch
(exception e)
finally
catch
(exception e2)
}}
原型模式的注意事項和細節
建立新的物件比較複雜時,可以利用原型模式簡化物件的建立過程,同時也能夠提
高效率不用重新初始化物件,而是動態地獲得物件執行時的狀態
如果原始物件發生變化(增加或者減少屬性),其它轉殖物件的也會發生相應的變化,
無需修改**
在實現深轉殖的時候可能需要比較複雜的**
缺點:需要為每乙個類配備乙個轉殖方法,這對全新的類來說不是很難,但對已有
的類進行改造時,需要修改其源**,違背了ocp原則。
設計模式筆記之四 原型模式
原型模式 原型模式就是需要建立多個例項的時候,以乙個為原型,其他例項複製 轉殖這個原型來獲得相似的例項。我們的實驗室最近研究這個模式還是因為市場的原因,市場上由於長久以來的習俗和政策,對女人的需求比較大,所有我們就的擴大女人的生產線,但是由於資金的原因,我們不能投入硬體成本只能改進我們的方法。首先我...
讀書筆記 設計模式(四) 原型模式
用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件。1 類初始化需要消化非常多的資源,這個資源包括資料,硬體資源等,通過原型拷貝避免這些消耗。2 通過new產生乙個物件需要非常繁瑣的資料準備或訪問許可權,這時可以使用原型模式,3 乙個物件需要提供給其他物件訪問,而且各個呼叫者可能都需要修改...
《大話設計模式 原型模式》筆記
1 原型模式 prototype 用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件。2 原型模式結構圖 3 簡單 實現 3.1 繼承cloneable介面 public class concrereprototype implements cloneable public string ...