原型模式(轉殖模式)

2021-10-05 11:16:48 字數 2640 閱讀 2111

轉殖模式最突出的優點就是,不用建立新的物件,省時間,效率高。

適合需要一下子新建很多類的情況

轉殖模式分為兩種,淺轉殖和深轉殖

實現 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加顏色,加背景圖,加文字,加事件等等。...

深轉殖和淺轉殖 原型模式

標籤 空格分隔 設計模式 原型模式 將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項.淺轉殖 被複製物件的所有基本變數都含有和原來變數完全相同的值,而其他所有的引用物件任然指向原來的物件.換言之,淺轉殖僅僅複製鎖考慮的物件,而不複製它所引用的物件.轉殖的深度僅僅到棧記憶體中.深轉殖...