Android之大話設(shè)計(jì)模式——第五節(jié)原型模式_第1頁(yè)
Android之大話設(shè)計(jì)模式——第五節(jié)原型模式_第2頁(yè)
Android之大話設(shè)計(jì)模式——第五節(jié)原型模式_第3頁(yè)
Android之大話設(shè)計(jì)模式——第五節(jié)原型模式_第4頁(yè)
Android之大話設(shè)計(jì)模式——第五節(jié)原型模式_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論