從Java的角度看,使用原型模式有個(gè)明顯的特點(diǎn),就是實(shí)現(xiàn)cloneable的clone()方法。
原型模式,能快速克隆出一個(gè)與之前存在的對(duì)象類似的另外一個(gè)我們想要的新對(duì)象。
意圖
用原型實(shí)例指定創(chuàng)建對(duì)象的種類,通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
結(jié)構(gòu)圖和代碼
結(jié)構(gòu)圖非常簡(jiǎn)單,以Intent為例:
如果需要?jiǎng)?chuàng)建的原型數(shù)目不固定,可以創(chuàng)建一個(gè)原型管理器,在復(fù)制原型對(duì)象之前,客戶端先在原型管理器中查看是否存在滿足條件的原型對(duì)象。如果有,則直接使用,如果沒(méi)有,克隆一個(gè)。這種稱作登記形式的原型模式。
適用原型模式可以對(duì)客戶端隱藏產(chǎn)品的具體類,因此減少了客戶知道的數(shù)字的數(shù)目,此外是客戶無(wú)需改變?cè)湍J降娜毕菔敲總€(gè)原型的子類都必須實(shí)現(xiàn)Cloneable接口,這個(gè)實(shí)現(xiàn)起來(lái)有時(shí)候比較困難。
效果
(1)創(chuàng)建型模式
(2)運(yùn)行時(shí)刻增加和刪除產(chǎn)品
(3)改變只以指定新對(duì)象
(4)改變結(jié)構(gòu)以指定新對(duì)象
(5)減少子類的構(gòu)造