轉殖模式最突出的優點就是,不用建立新的物件,省時間,效率高。
適合需要一下子新建很多類的情況
轉殖模式分為兩種,淺轉殖和深轉殖
實現 cloneable可以實現轉殖
淺轉殖就是不能轉殖物件屬性,兩者公用乙個物件屬性位址(字串比較特殊,是不可改變物件,所以可以不看做物件)
public
class
sheep
implements
cloneable
public
sheep
(string sname, date birthday)
public string getsname()
public
void
setsname
(string sname)
public date getbirthday()
public
void
setbirthday
(date birthday)
@override
public object clone()
throws clonenotsupportedexception
}
測試
public
static
void
main
(string[
] args)
throws clonenotsupportedexception
在轉殖之後,改變了date的值
可以看到轉殖物件也被改變了,說明兩者公用乙個date物件,這是淺轉殖
深轉殖
深轉殖也分為兩種實現方式,
1.在淺轉殖基礎上稍作改動
將上面的clone方法新增下面的兩行**,其實就是將birthday這個date物件也進行轉殖,其他均不作改變
可以看到已經不是同乙個物件了,說明date物件實現了轉殖
2.序列化和反序列化進行轉殖
單例模式裡面擴充套件了它的破解方式,裡面就有序列化與反序列化,而且複製的是不同位址的物件
sheep還是原來的sheep,去掉之前的轉殖操作就可以了,
序列化要實現serializable介面加上就行了
原型
date date=
newdate
(342415323l)
; sheep sheep=
newsheep
("少利"
,date)
;
轉殖(序列化和反序列化)
bytearrayoutputstream baos=
newbytearrayoutputstream()
; objectoutputstream oos=
newobjectoutputstream
(baos)
; oos.
writeobject
(sheep)
;byte
datas=baos.
tobytearray()
; bytearrayinputstream bais=
newbytearrayinputstream
(datas)
; objectinputstream ois=
newobjectinputstream
(bais)
; sheep sheepclone=
(sheep) ois.
readobject()
;
測試
七 原型模式(深淺轉殖)
類似 影之分身術 的東西,以 鳴人 為原型,複製1000份出來,群毆之 在初始化資訊不發生變化的情況下,轉殖是最好的辦法。既隱藏了物件建立的細節,又對效能大大的提高 不用重新初始化物件,而是動態地獲得物件執行時的狀態。摘自 大話設計模式 提到原型模式,就不得不提深淺轉殖。兩者都是完成對原型的複製,而...
原型模式(物件的轉殖)
原型模式 屬於物件的建立模式 通過給出乙個原型物件 來指明所有建立的物件的型別 然後用這個原型物件 提供的複製辦法 建立出更多同型別 的物件。聯想到瀏覽器中,如果我們生成了乙個button例項,這個button例項經過一系列操作,攜帶了各種資訊,比如button加顏色,加背景圖,加文字,加事件等等。...
深轉殖和淺轉殖 原型模式
標籤 空格分隔 設計模式 原型模式 將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項.淺轉殖 被複製物件的所有基本變數都含有和原來變數完全相同的值,而其他所有的引用物件任然指向原來的物件.換言之,淺轉殖僅僅複製鎖考慮的物件,而不複製它所引用的物件.轉殖的深度僅僅到棧記憶體中.深轉殖...