Java設計模式4 原型模式

2021-08-14 01:44:45 字數 3124 閱讀 2813

原型模式是一種建立型設計模式,它通過複製乙個已經存在的例項來返回新的例項,而不是新建例項.被複製的例項就是我們所稱的原型,這個原型是可定製的.

說白了就是乙個類實現了cloneable,重寫clone方法,就可以呼叫這個類的物件複製例項了。

1、拷貝分類

原型模式中的拷貝分為」淺拷貝」和」深拷貝」:

淺拷貝: 對值型別的成員變數進行值的複製,對引用型別的成員變數只複製引用,不複製引用的物件.

深拷貝: 對值型別的成員變數進行值的複製,對引用型別的成員變數也進行引用物件的複製.

2、淺拷貝演示1

a.定義乙個prototype類
public

class

prototype

implements

cloneable

public

void

setname(string name)

public object clone() catch (clonenotsupportedexception e) } }

b.使用
public

class testmain

private

static

void

testprototype()

}結果:

original object:changed object

cloned object:original object

3、淺拷貝演示2

我們定義乙個prototype類,不去實現cloneable介面,看看這個類裡面的屬效能不能被複製(答案是不能的)

a.我們定義乙個prototype類,不去實現cloneable介面

public

class prototype

public

void

setname(string name)

}

b.定義乙個newprototype,實現cloneable介面
public

class

newprototype

implements

cloneable

public

void

setid(string id)

//將上面的類作為這個類的乙個屬性,看看能不能clone

private prototype prototype;

public prototype getprototype()

public

void

setprototype(prototype prototype)

public object clone() catch (clonenotsupportedexception e) }}

c.測試使用
public

class testmain

private

static

void

testprototype()

}結果:

original object id:test1

original object name:changed object

//已經改變了原來的值了

cloned object id:testcopy

cloned object name:changed object

可以看出來,不實現cloneable的類屬性是不能被複製的。如果要prototype這個屬性也被複製,只要prototype這個類實現clonbeable介面就行。
4、深拷貝

利用序列化來做深複製

把物件寫道流裡的過程是序列化(serilization)過程;

把物件從流中讀出來是並行化(deserialization)過程. 寫在流裡的是物件的乙個拷貝,然後再從流裡讀出來重建物件.

a.建立乙個prototypese類,實現serializable序列化介面

public

class

prototypese

implements

serializable

public

void

setname(string name)

}

b.建立乙個newprototypese,同樣實現serializable介面
public

class

newprototypese

implements

serializable

public

void

setid(string id)

private prototypese prototype;

public prototypese getprototype()

public

void

setprototype(prototypese prototype)

public object deepclone() catch (ioexception | classnotfoundexception e) }}

c.使用
public

class testdeepclone

}結果:

original name:test1

cloned name:test2

注意:原型類並沒有實現cloneable介面,而是自己定義乙個deepclone方法複製

設計模式4 原型模式

通過實現cloneable介面,並重寫父類 即object 的clone方法來返回和該物件一模一樣的物件來實現例項化乙個新物件的效果。比較官方的解釋是 用原型例項指定建立物件的種類,並且通過拷貝這些原型來建立新的物件。public class prototype implements cloneab...

Java設計模式 原型模式

原型模式是乙個建立型的模式。該模式有乙個樣板例項,使用者從這個樣板物件中複製出乙個內部屬性一致的物件,這個過程也就是俗稱的 轉殖 被複製的例項就是所稱的 原型 原型模式 用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件 通過實現cloneable介面 public class wordd...

Python設計模式4 原型模式

原型模式,也是用於建立物件時的一種設計方法。主要應用場景是 每次初始化某個物件時,需要傳遞大量的引數,很不方便,此時,可以使用原型模式,在已經建立並初始化的物件基礎上,可以快速而又方便建立新的不同物件。主要原理 使用深拷貝,複製乙個已建立的物件,然後使用 dict update 方法更新已建立物件中...