下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【原創(chuàng)·教程·連載】Android之大話設(shè)計(jì)模式-設(shè)計(jì)模式 創(chuàng)建型模式 第五章:原型模式 <大話設(shè)計(jì)模式> 原型模式 肉麻情話 原型模式應(yīng)用場(chǎng)景舉例: GG和MM經(jīng)常在QQ上聊天,但是GG打字的速度慢如蝸牛爬行,每次MM在瞬間完成恢復(fù)或者問候是,GG都會(huì)很緊張的去盡力快速打字,盡管如此,還是讓MM有些不高心,MM說回復(fù)信息這么慢,顯然是用心不專,不在乎她。哎,GG也是百口難辯啊,不過也確實(shí)是沒有辦法。
2、160; 有一天,GG想自己的密友K傾訴了自己的苦衷。K頓生大笑。說道:“傻瓜,你怎么不去網(wǎng)上收集一些肉麻的情話以及一些你們經(jīng)常說話會(huì)涉及到主題,把這些東西拷貝下來保存在自己的電腦或者U盤里面,這樣一來如果下次在聊天就可以借用過來了!”,“K就是K,我怎么沒有想到呢妙極妙極_”,“不過不要太高興,這些東西是要適當(dāng)修改的,要不然你把名字都搞錯(cuò)的話,就等著你的MM把你踹死吧O(_)O哈哈”K補(bǔ)充道,“嗯,說的對(duì),謝謝K哥解決了我的心腹之患啊”GG樂不可支的說道。 這是MM由在網(wǎng)上
3、和GG聊天,GG專門復(fù)制那些實(shí)現(xiàn)準(zhǔn)備好的肉麻情話經(jīng)過稍加修改后發(fā)給MM,MM都快美死了原型模式解釋: 原型模式(Prototype Pattern)是一種對(duì)象創(chuàng)建型模式,它采取復(fù)制原型對(duì)象的方法來創(chuàng)建對(duì)象的實(shí)例。使用Prototype模式創(chuàng)建的實(shí)例,具有與原型一樣的初始化數(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)建對(duì)象的請(qǐng)求。 抽象原型(Prototype)角色:通常由一個(gè)Java接口或者Java抽象類來實(shí)現(xiàn)。從而為具體原型設(shè)立好規(guī)范。
5、 具體原型(Concrete Prototype)角色:被復(fù)制的具體對(duì)象,此具體角色實(shí)現(xiàn)了抽象原型角色所要求實(shí)現(xiàn)的方法。原型模式的UML圖如下所示:原型模式深入分析: 原型模式的工作原理是:通過將一個(gè)原型對(duì)象傳給那個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象,這個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象通過請(qǐng)求原型對(duì)象拷貝它們自己來實(shí)施創(chuàng)建。 Java在語言級(jí)別是直接支持原型模式的。我們知道,在java.lang.Object是一切類和接口的父類,而java.lang.Object正好提供
6、了一個(gè)clone()方法來支持原型模式。當(dāng)然,一個(gè)對(duì)象如果想具有被復(fù)制的能力,還必須聲明自己實(shí)現(xiàn)了Cloneable接口,如果沒有聲明,就會(huì)在對(duì)象被復(fù)制的時(shí)候拋出CloneNotSupportedException. 在java.lang.Object中提供了一個(gè) protected Object clone()方法來支持對(duì)象的克隆,子類可以采用默認(rèn)的方式進(jìn)行所有字段的復(fù)制,也可以在子類中覆蓋clone()方便,根據(jù)實(shí)際需要定制自己的復(fù)制行為。 復(fù)制淺復(fù)制和深復(fù)制之分,淺復(fù)制
7、是對(duì)基本數(shù)據(jù)類型和String類型而言的,深復(fù)制是對(duì)其他引用類型而言的。對(duì)于深復(fù)制,每一個(gè)應(yīng)用也需要聲明Cloneable接口。原型模式使用場(chǎng)景分析及代碼實(shí)現(xiàn): 在上面的使用場(chǎng)景中,因?yàn)镚G打字太慢經(jīng)常被女朋友怪罪,所以有了拷貝網(wǎng)上肉麻情話的和主要聊天話題內(nèi)容的辦法。這樣,以后GG每次和MM聊天的時(shí)候只需要把原話拷貝出來,加以適當(dāng)修改就行,省時(shí)省力,而且效果絕佳_,這就是設(shè)計(jì)模式的原型模式的使用的好處O(_)O UML模型圖如下所示:
8、60; 建立一個(gè)肉麻情話類,類中有非常詳細(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()方法,因?yàn)檫@里有List引用進(jìn)行深度復(fù)制
13、160; * see java.lang.Object#clone() */ public SweetWord clone() try /新建一個(gè)肉麻情話對(duì)象,同時(shí)復(fù)制基本的屬性
14、0; SweetWord sweetWord = (SweetWord)super.clone(); /新建一個(gè)肉麻情話集合 List<String> newContents = new ArrayList<String>();
15、160; /把原對(duì)象的肉麻情話集合中的肉麻情話集合通過forEach循環(huán)加入新建的newContents中 for(String friend : this.getContents() newContents.add(friend);
16、0; /把新的肉麻情話集合設(shè)置進(jìn)新的對(duì)象 sweetWord.setContents(newContents); /返回新的的肉麻情話對(duì)象
17、 return sweetWord; catch (CloneNotSupportedException e) e.printStackTrace(); return null;
18、0; 最后我們建立測(cè)試客戶端:package com.diermeng.designPattern.Prototype.client; import java.util.ArrayList;import java.util.List; import com.diermeng.designPattern.Prototype.impl.SweetWord; /* * 肉麻情話測(cè)試客戶端 */public
19、0;class PrototypeClient public static void main(String args) /新建一個(gè)肉麻情話對(duì)象并設(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(); /分別輸入兩個(gè)對(duì)象的內(nèi)容 System.out.println(content1.getContents(); System.out.println(content2.
22、getContents(); /在原來的肉麻情話對(duì)象中加入新的內(nèi)容并把新的內(nèi)容設(shè)置進(jìn)去 contents.add("你是我真命天女"); content1.setContents(contents); /分別輸出新的修改后的兩個(gè)肉麻情話對(duì)象
23、0; System.out.println(content1.getContents(); System.out.println(content2.getContents(); 輸出的結(jié)果如下:寶貝兒,我愛你, 你是我的唯一寶貝兒,我愛你, 你是我的唯一寶貝兒,我愛你, 你是我的唯一, 你是我真命天女寶貝兒,我愛你, 你是我的唯一 原型模式的優(yōu)缺點(diǎn)分析:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北師大版四年級(jí)上冊(cè)數(shù)學(xué)第一單元 認(rèn)識(shí)更大的數(shù) 測(cè)試卷及答案【網(wǎng)校專用】
- 睿彩塑膠擴(kuò)產(chǎn)二期建設(shè)項(xiàng)目環(huán)評(píng)報(bào)告表
- 粉煤灰資源化利用制磚項(xiàng)目環(huán)評(píng)報(bào)告表
- IATF169492016汽車質(zhì)量管理體系標(biāo)準(zhǔn)試卷
- 2024年防汛抗洪應(yīng)急預(yù)案考試練習(xí)試卷附答案
- 車輛檢修工必知必會(huì)復(fù)習(xí)試題有答案
- 特種作業(yè)人員 低壓電工作業(yè) 理論考試專項(xiàng)測(cè)試卷
- 古董維護(hù)服務(wù)協(xié)議
- 評(píng)級(jí)練習(xí)試題
- 創(chuàng)業(yè)投資協(xié)議書模板(2024年版)
- 防火門窗施工方案
- “雙師教學(xué)”在初中數(shù)學(xué)課堂中的應(yīng)用
- 戰(zhàn)略合作簽約儀式教育PPT課程課件
- 土方填筑碾壓試驗(yàn)報(bào)告
- 老舊小區(qū)排水部分雨污水改造監(jiān)理細(xì)則
- 2022年地殼運(yùn)動(dòng)與變化教案與學(xué)案
- 上海市單位退工證明退工單(四聯(lián))
- 《建筑起重吊裝工程安全技術(shù)規(guī)程》JGJ276
- 市政道路水穩(wěn)層項(xiàng)目施工合同
- 睿丁英語小紅帽和大灰狼的故事
- 轉(zhuǎn)人教版七年級(jí)上期中復(fù)習(xí)教案
評(píng)論
0/150
提交評(píng)論