設計模式筆記四 原型模式

2021-10-03 11:37:02 字數 1717 閱讀 2718

基本介紹

原型模式(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 ...