原型模式

一. 概念

定義:Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.(用原型實(shí)例指定創(chuàng)建對象的種類诡延,并且通過拷貝這些原型創(chuàng)建新的對象。)
意圖:用原型實(shí)例指定創(chuàng)建對象的種類叔壤,并且通過拷貝這些原型創(chuàng)建新的對象。

主要解決:在運(yùn)行期建立和刪除原型甫菠。

何時(shí)使用: 1、當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)建,構(gòu)成和表示時(shí)控乾。 2幔欧、當(dāng)要實(shí)例化的類是在運(yùn)行時(shí)刻指定時(shí)罪治,例如,通過動(dòng)態(tài)裝載礁蔗。 3觉义、為了避免創(chuàng)建一個(gè)與產(chǎn)品類層次平行的工廠類層次時(shí)。 4浴井、當(dāng)一個(gè)類的實(shí)例只能有幾個(gè)不同狀態(tài)組合中的一種時(shí)晒骇。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。

如何解決:利用已有的一個(gè)原型對象磺浙,快速地生成和原型對象一樣的實(shí)例洪囤。

關(guān)鍵代碼: 1、實(shí)現(xiàn)克隆操作撕氧,在 JAVA 繼承 Cloneable瘤缩,重寫 clone(),在 .NET 中可以使用 Object 類的 MemberwiseClone() 方法來實(shí)現(xiàn)對象的淺拷貝或通過序列化的方式來實(shí)現(xiàn)深拷貝呵曹。 2款咖、原型模式同樣用于隔離類對象的使用者和具體類型(易變類)之間的耦合關(guān)系,它同樣要求這些"易變類"擁有穩(wěn)定的接口奄喂。

應(yīng)用實(shí)例: 1铐殃、細(xì)胞分裂。 2跨新、JAVA 中的 Object clone() 方法富腊。

優(yōu)點(diǎn): 1、性能提高域帐。 2赘被、逃避構(gòu)造函數(shù)的約束。

缺點(diǎn): 1肖揣、配備克隆方法需要對類的功能進(jìn)行通盤考慮民假,這對于全新的類不是很難,但對于已有的類不一定很容易龙优,特別當(dāng)一個(gè)類引用不支持串行化的間接對象羊异,或者引用含有循環(huán)結(jié)構(gòu)的時(shí)候。 2、必須實(shí)現(xiàn) Cloneable 接口野舶。 3易迹、逃避構(gòu)造函數(shù)的約束。

使用場景: 1平道、資源優(yōu)化場景睹欲。 2、類初始化需要消化非常多的資源一屋,這個(gè)資源包括數(shù)據(jù)窘疮、硬件資源等。 3陆淀、性能和安全要求的場景考余。 4先嬉、通過 new 產(chǎn)生一個(gè)對象需要非常繁瑣的數(shù)據(jù)準(zhǔn)備或訪問權(quán)限轧苫,則可以使用原型模式。 5疫蔓、一個(gè)對象多個(gè)修改者的場景含懊。 6、一個(gè)對象需要提供給其他對象訪問衅胀,而且各個(gè)調(diào)用者可能都需要修改其值時(shí)岔乔,可以考慮使用原型模式拷貝多個(gè)對象供調(diào)用者使用。 7滚躯、在實(shí)際項(xiàng)目中雏门,原型模式很少單獨(dú)出現(xiàn),一般是和工廠方法模式一起出現(xiàn)掸掏,通過 clone 的方法創(chuàng)建一個(gè)對象茁影,然后由工廠方法提供給調(diào)用者。原型模式已經(jīng)與 Java 融為渾然一體丧凤,大家可以隨手拿來使用募闲。

注意事項(xiàng):與通過對一個(gè)類進(jìn)行實(shí)例化來構(gòu)造新對象不同的是,原型模式是通過拷貝一個(gè)現(xiàn)有對象生成新對象的愿待。淺拷貝實(shí)現(xiàn) Cloneable浩螺,重寫,深拷貝是通過實(shí)現(xiàn) Serializable 讀取二進(jìn)制流

二. 場景

三. 代碼

偽代碼仍侥,java中需要兩種類要出,實(shí)現(xiàn)clonable接口的抽象父類,
python則非常簡單农渊,copy.deepcopy方法患蹂,或者對象.class(參數(shù)) 兩種方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市况脆,隨后出現(xiàn)的幾起案子饭宾,更是在濱河造成了極大的恐慌,老刑警劉巖格了,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件看铆,死亡現(xiàn)場離奇詭異,居然都是意外死亡盛末,警方通過查閱死者的電腦和手機(jī)弹惦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悄但,“玉大人棠隐,你說我怎么就攤上這事¢芟” “怎么了助泽?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嚎京。 經(jīng)常有香客問我嗡贺,道長,這世上最難降的妖魔是什么鞍帝? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任诫睬,我火速辦了婚禮,結(jié)果婚禮上帕涌,老公的妹妹穿的比我還像新娘摄凡。我一直安慰自己,他們只是感情好蚓曼,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布亲澡。 她就那樣靜靜地躺著,像睡著了一般辟躏。 火紅的嫁衣襯著肌膚如雪谷扣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天捎琐,我揣著相機(jī)與錄音会涎,去河邊找鬼。 笑死瑞凑,一個(gè)胖子當(dāng)著我的面吹牛末秃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播籽御,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼练慕,長吁一口氣:“原來是場噩夢啊……” “哼惰匙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铃将,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤项鬼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后劲阎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绘盟,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年悯仙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了龄毡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锡垄,死狀恐怖沦零,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情货岭,我是刑警寧澤路操,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站茴她,受9級(jí)特大地震影響寻拂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丈牢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞄沙。 院中可真熱鬧己沛,春花似錦、人聲如沸距境。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垫桂。三九已至师幕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诬滩,已是汗流浹背霹粥。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疼鸟,地道東北人后控。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像空镜,于是被迫代替她去往敵國和親浩淘。 傳聞我的和親對象是個(gè)殘疾皇子捌朴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1大同小異的工作周報(bào) Sunny軟件公司一直使用自行開發(fā)的一套OA (Office Automatic,辦公自動(dòng)化...
    justCode_閱讀 1,163評(píng)論 0 3
  • 1 場景問題# 1.1 訂單處理系統(tǒng)## 考慮這樣一個(gè)實(shí)際應(yīng)用:訂單處理系統(tǒng)张抄。 現(xiàn)在有一個(gè)訂單處理的系統(tǒng)砂蔽,里面有個(gè)...
    七寸知架構(gòu)閱讀 4,450評(píng)論 3 63
  • 前言 Android的設(shè)計(jì)模式系列文章介紹,歡迎關(guān)注署惯,持續(xù)更新中: Android的設(shè)計(jì)模式-設(shè)計(jì)模式的六大原則一...
    四月葡萄閱讀 5,578評(píng)論 4 10
  • 01 五一小長假泽台,和朋友一起去了一趟潿洲島什荣。離島回到北海市區(qū)的那一晚,我們決定去看夜場電影怀酷。 網(wǎng)絡(luò)上的一致好評(píng)稻爬,金...
    雪小禾閱讀 319評(píng)論 0 18
  • 我在聽樊登讀書會(huì)的時(shí)候,樊登老師說他大三時(shí)去了一家公告公司實(shí)習(xí)蜕依,公司里有一個(gè)湖南小伙桅锄,高中就輟學(xué)了,但是他的ps技...
    木南Ruan閱讀 105評(píng)論 0 0