設計模式 建立型模式 原型模式

2021-10-02 12:08:54 字數 1679 閱讀 8689

1) 原型模式(prototype模式)是指:用原型例項指定建立物件的種類,並且通過拷貝這些原型,建立新的物件

2) 原型模式是一種建立型設計模式,允許乙個物件再建立另外乙個可定製的物件,無需知道如何建立的細節

3) 工作原理是:通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型物件拷貝它們自己來實施建立,即物件.clone()

public class deepprototype implements serializable, cloneable

//深拷貝 - 方式 1 使用clone 方法

@override

protected object clone() throws clonenotsupportedexception

//深拷貝 - 方式2 通過物件的序列化實現 (推薦)

public object deepclone() catch (exception e) finally catch (exception e2)

} }}

public class deepcloneabletarget implements serializable, cloneable 

//因為該類的屬性,都是string , 因此我們這裡使用預設的clone完成即可

@override

protected object clone() throws clonenotsupportedexception

}

public class client 

}

淺拷貝的介紹

1) 對於資料型別是基本資料型別的成員變數,淺拷貝會直接進行值傳遞,也就是將該屬性值複製乙份給新的物件。

2) 對於資料型別是引用資料型別的成員變數,比如說成員變數是某個陣列、某個類的物件等,那麼淺拷貝會進行引用傳遞,也就是只是將該成員變數的引用值(記憶體位址)複製乙份給新的物件。因為實際上兩個物件的該成員變數都指向同乙個例項。在這種情況下,在乙個物件中修改該成員變數會影響到另乙個物件的該成員變數值

3) 前面我們轉殖羊就是淺拷貝

4) 淺拷貝是使用預設的 clone()方法來實現

sheep = (sheep) super.clone();

深拷貝基本介紹

1) 複製物件的所有基本資料型別的成員變數值

2) 為所有引用資料型別的成員變數申請儲存空間,並複製每個引用資料型別成員變數所引用的物件,直到該物件可達的所有物件。也就是說,物件進行深拷貝要對整個物件進行拷貝

3) 深拷貝實現方式1:重寫clone方法來實現深拷貝

4) 深拷貝實現方式2:通過物件序列化實現深拷貝(推薦)

原型模式的注意事項和細節

1) 建立新的物件比較複雜時,可以利用原型模式簡化物件的建立過程,同時也能夠提高效率

2) 不用重新初始化物件,而是動態地獲得物件執行時的狀態

3) 如果原始物件發生變化(增加或者減少屬性),其它轉殖物件的也會發生相應的變化,無需修改**

4) 在實現深轉殖的時候可能需要比較複雜的**

5) 缺點:需要為每乙個類配備乙個轉殖方法,這對全新的類來說不是很難,但對已有的類進行改造時,需要修改其源**,違背了ocp原則,這點請同學們注意.

建立型模式 原型模式

使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...

建立型模式 原型模式

原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...

原型模式 建立型模式

文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...