




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、【原創(chuàng)·教程·連載】Android之大話設(shè)計模式-設(shè)計模式 創(chuàng)建型模式 第五章:原型模式 <大話設(shè)計模式> 原型模式 肉麻情話 原型模式應(yīng)用場景舉例: GG和MM經(jīng)常在QQ上聊天,但是GG打字的速度慢如蝸牛爬行,每次MM在瞬間完成恢復(fù)或者問候是,GG都會很緊張的去盡力快速打字,盡管如此,還是讓MM有些不高心,MM說回復(fù)信息這么慢,顯然是用心不專,不在乎她。哎,GG也是百口難辯啊,不過也確實是沒有辦法。
2、160; 有一天,GG想自己的密友K傾訴了自己的苦衷。K頓生大笑。說道:“傻瓜,你怎么不去網(wǎng)上收集一些肉麻的情話以及一些你們經(jīng)常說話會涉及到主題,把這些東西拷貝下來保存在自己的電腦或者U盤里面,這樣一來如果下次在聊天就可以借用過來了!”,“K就是K,我怎么沒有想到呢妙極妙極_”,“不過不要太高興,這些東西是要適當(dāng)修改的,要不然你把名字都搞錯的話,就等著你的MM把你踹死吧O(_)O哈哈”K補充道,“嗯,說的對,謝謝K哥解決了我的心腹之患啊”GG樂不可支的說道。 這是MM由在網(wǎng)上
3、和GG聊天,GG專門復(fù)制那些實現(xiàn)準(zhǔn)備好的肉麻情話經(jīng)過稍加修改后發(fā)給MM,MM都快美死了原型模式解釋: 原型模式(Prototype Pattern)是一種對象創(chuàng)建型模式,它采取復(fù)制原型對象的方法來創(chuàng)建對象的實例。使用Prototype模式創(chuàng)建的實例,具有與原型一樣的初始化數(shù)據(jù)英文定義為:Specify the kinds of objects to create using a prototypical instance, and create new objects by copyi
4、ng this prototype. 原型模式的UML圖: 原型模式涉及以下的角色: 客戶端(Client)角色: 客戶端提出創(chuàng)建對象的請求。 抽象原型(Prototype)角色:通常由一個Java接口或者Java抽象類來實現(xiàn)。從而為具體原型設(shè)立好規(guī)范。
5、 具體原型(Concrete Prototype)角色:被復(fù)制的具體對象,此具體角色實現(xiàn)了抽象原型角色所要求實現(xiàn)的方法。原型模式的UML圖如下所示:原型模式深入分析: 原型模式的工作原理是:通過將一個原型對象傳給那個要發(fā)動創(chuàng)建的對象,這個要發(fā)動創(chuàng)建的對象通過請求原型對象拷貝它們自己來實施創(chuàng)建。 Java在語言級別是直接支持原型模式的。我們知道,在java.lang.Object是一切類和接口的父類,而java.lang.Object正好提供
6、了一個clone()方法來支持原型模式。當(dāng)然,一個對象如果想具有被復(fù)制的能力,還必須聲明自己實現(xiàn)了Cloneable接口,如果沒有聲明,就會在對象被復(fù)制的時候拋出CloneNotSupportedException. 在java.lang.Object中提供了一個 protected Object clone()方法來支持對象的克隆,子類可以采用默認(rèn)的方式進行所有字段的復(fù)制,也可以在子類中覆蓋clone()方便,根據(jù)實際需要定制自己的復(fù)制行為。 復(fù)制淺復(fù)制和深復(fù)制之分,淺復(fù)制
7、是對基本數(shù)據(jù)類型和String類型而言的,深復(fù)制是對其他引用類型而言的。對于深復(fù)制,每一個應(yīng)用也需要聲明Cloneable接口。原型模式使用場景分析及代碼實現(xiàn): 在上面的使用場景中,因為GG打字太慢經(jīng)常被女朋友怪罪,所以有了拷貝網(wǎng)上肉麻情話的和主要聊天話題內(nèi)容的辦法。這樣,以后GG每次和MM聊天的時候只需要把原話拷貝出來,加以適當(dāng)修改就行,省時省力,而且效果絕佳_,這就是設(shè)計模式的原型模式的使用的好處O(_)O UML模型圖如下所示:
8、60; 建立一個肉麻情話類,類中有非常詳細(xì)的注釋,這里就不在解釋了:package com.diermeng.designPattern.Prototype.impl;import java.util.ArrayList;import java.util.List;/* * 肉麻情話類 */public class SweetWord implements Cloneable /肉麻情話句子
9、;private String content; /肉麻情話句子集合 private List<String> contents; /* * 獲取肉麻情話集合 */ public List<String> getContents() &
10、#160; return contents; /* * 設(shè)置肉麻情話集合 */ public void setContents(List<String> contents) this.contents = contents
11、; /* * 獲取肉麻情話 */ public String getContent() return content; /* * 設(shè)
12、置肉麻情話 */ public void setContent(String content) this.content = content; /* * 肉麻情話覆蓋了Object類的clone()方法,因為這里有List引用進行深度復(fù)制
13、160; * see java.lang.Object#clone() */ public SweetWord clone() try /新建一個肉麻情話對象,同時復(fù)制基本的屬性
14、0; SweetWord sweetWord = (SweetWord)super.clone(); /新建一個肉麻情話集合 List<String> newContents = new ArrayList<String>();
15、160; /把原對象的肉麻情話集合中的肉麻情話集合通過forEach循環(huán)加入新建的newContents中 for(String friend : this.getContents() newContents.add(friend);
16、0; /把新的肉麻情話集合設(shè)置進新的對象 sweetWord.setContents(newContents); /返回新的的肉麻情話對象
17、 return sweetWord; catch (CloneNotSupportedException e) e.printStackTrace(); return null;
18、0; 最后我們建立測試客戶端:package com.diermeng.designPattern.Prototype.client; import java.util.ArrayList;import java.util.List; import com.diermeng.designPattern.Prototype.impl.SweetWord; /* * 肉麻情話測試客戶端 */public
19、0;class PrototypeClient public static void main(String args) /新建一個肉麻情話對象并設(shè)置相應(yīng)的屬性 SweetWord content1 = new SweetWord(); List<S
20、tring> contents = new ArrayList<String>(); contents.add("寶貝兒,我愛你"); contents.add("你是我的唯一"); content1.setContents(contents);
21、160; /復(fù)制content1 SweetWord content2 = content1.clone(); /分別輸入兩個對象的內(nèi)容 System.out.println(content1.getContents(); System.out.println(content2.
22、getContents(); /在原來的肉麻情話對象中加入新的內(nèi)容并把新的內(nèi)容設(shè)置進去 contents.add("你是我真命天女"); content1.setContents(contents); /分別輸出新的修改后的兩個肉麻情話對象
23、0; System.out.println(content1.getContents(); System.out.println(content2.getContents(); 輸出的結(jié)果如下:寶貝兒,我愛你, 你是我的唯一寶貝兒,我愛你, 你是我的唯一寶貝兒,我愛你, 你是我的唯一, 你是我真命天女寶貝兒,我愛你, 你是我的唯一 原型模式的優(yōu)缺點分析:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務(wù)人員的責(zé)任與義務(wù)計劃
- 制定清晰的財務(wù)目標(biāo)計劃
- 幼兒藝術(shù)表現(xiàn)的多樣性研究計劃
- 萬源市竹源煤業(yè)有限公司長石二煤礦礦山地質(zhì)環(huán)境保護與土地復(fù)墾方案情況
- 2025年經(jīng)典大班蒙氏數(shù)學(xué)標(biāo)準(zhǔn)教案
- 空乘禮儀知識培訓(xùn)班課件
- 2025年四川貨運從業(yè)資格證考試模擬考試答案
- 胃癌治療手段
- 2025年洛陽貨運從業(yè)資格證考試技巧
- 3D打印技術(shù)知到課后答案智慧樹章節(jié)測試答案2025年春上海電子信息職業(yè)技術(shù)學(xué)院
- 辦公用品供貨服務(wù)計劃方案
- DB37∕T 5107-2018 城鎮(zhèn)排水管道檢測與評估技術(shù)規(guī)程
- 2022新冠疫苗疑似預(yù)防接種異常反應(yīng)監(jiān)測和處置方案
- 酒精溶液體積濃度、質(zhì)量濃度與密度對照表
- 主要腸內(nèi)營養(yǎng)制劑成分比較
- 老年人各系統(tǒng)的老化改變
- 小學(xué)五年級綜合實踐課教案
- 煤礦井下供電常用計算公式及系數(shù)
- ISO14001:2015中文版(20211205141421)
- 汽車總裝車間板鏈輸送線的應(yīng)用研究
- 工作日志模板
評論
0/150
提交評論