原型模式是一種建立型設計模式,它通過複製乙個已經存在的例項來返回新的例項,而不是新建例項.被複製的例項就是我們所稱的原型,這個原型是可定製的.
說白了就是乙個類實現了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 方法更新已建立物件中...