<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0

    一、Prototype模式的實現:
     
    1、淺克?。?br />  
    a. 提供一個類作為克隆的原型,該類實現了Clonable接口
     
    b. 在該類中覆蓋Object類的clone()方法,采用super.clone()方法完成克隆
     
    c. 在外部使用場合先產生一個原型對象,然后調用其clone()方法產生克隆對象

    2、深克?。?br />  
    a. 提供一個類作為克隆的原型,該類實現了Serializable接口
     
    b. 在該類中覆蓋Object類的clone()方法,采用序列化的方法完成克隆(對象流的讀寫)
     
    c.在外部使用場合先產生一個原型對象,然后調用其clone()方法產生克隆對象


    二、Prototype模式與深、淺克隆:

    使用Object.clone()方法進行的克隆是“淺克隆”-被復制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺復制僅僅復制所考慮的對象,而不復制它所引用的對象。淺克隆的步驟如下:

    ①為了獲取對象的一份拷貝,我們可以利用Object類的clone()方法。

    ②在派生類中覆蓋基類的clone()方法,并聲明為public。

    ③在派生類的clone()方法中,調用super.clone()。

    ④在派生類中實現Cloneable接口。
     

    為什么我們在派生類中覆蓋Object的clone()方法時,一定要調用super.clone()呢?在運行時刻,Object中的clone()要識別出你要復制的是哪一個對象,然后為此對象分配空間,并進行對象的復制,將原始對象的內容一一復制到新對象的存儲空間中。

    要實現“深克隆”-被復制對象的所有變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。那些引用其他對象的變量將指向被復制過的新對象,而不再是原有的那些被引用的對象。換言之,深復制把要復制的對象所引用的對象都復制了一遍。

    深克隆需要使用Java中提供的對象串行化功能-即把要復制的對象寫入到一個緩沖流,然后通過輸入流讀入,完成對象的復制

    例:

    try {
       // 在內存中開辟一塊緩沖區,用于將自身寫入
       ByteArrayOutputStream bout = new ByteArrayOutputStream();
       ObjectOutputStream out = new ObjectOutputStream(bout);
       // 通過Serialization機制將自身寫入該緩沖區
       out.writeObject(this);
       out.close();

       // 找到剛才開辟的緩沖區準備讀取
       ByteArrayInputStream bin = new ByteArrayInputStream(bout
         .toByteArray());
       ObjectInputStream in = new ObjectInputStream(bin);
       // 將剛才寫入的內容讀入一個新的對象
        Object ret = in.readObject();
       in.close();

       // 返回這個對象,拷貝完畢
       return ret;
      } catch (Exception e) {
       e.printStackTrace();
       return null;
      }


    三、Prototype模式的優、缺點和適用場合:

    使用Prototype模式的一個好處就是可以節省大量的接口實現類的編寫。采用工廠模式的話,如果分別為用戶指定的每種場合都提供一個用戶接口工廠類,將會為我們帶來繁重的工作量。未來避免用戶接口工廠類不斷增加,可以考慮使用Prototype模式。

    而Prototype模式的一個致命的缺點是:Java中的原型方法不允許新對象擁有與父對象不同的方法。這時候,在使用原型方法之前,需要仔細考慮原型方法的利弊,甚至要試一下Prototype模式是否滿足需求。

    綜上所述:Prototype模式最適用的場合應該是:當幾個對象的類僅在屬性上存在一點差異,而行為上完全相同時。可以在復制一個原型對象后,對其屬性進行細小的微調,從而實現定制化的目的。



    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-01-02 22:59 Paul Lin 閱讀(2039) 評論(0)  編輯  收藏 所屬分類: 模式與重構
    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产黄色免费网站| 久久精品免费观看国产| 免费观看美女裸体网站| 亚洲乱码卡三乱码新区| 国国内清清草原免费视频99| 国产成人亚洲精品| 午夜视频在线在免费| 亚洲AV无码一区二区三区网址 | 在线免费播放一级毛片 | 亚洲欧洲日本精品| 在线观看免费中文视频| 亚洲精品视频久久| 一区二区无码免费视频网站| 亚洲精品国产首次亮相| 亚洲精品国产日韩无码AV永久免费网 | 亚洲色图校园春色| 无码中文字幕av免费放| 人人狠狠综合久久亚洲| 亚洲中文字幕久久精品无码喷水 | 国产成人免费片在线视频观看| 色妞www精品视频免费看| 中文字幕亚洲激情| 无码精品一区二区三区免费视频| 亚洲天堂电影在线观看| 国产自产拍精品视频免费看| a级成人毛片免费视频高清| 亚洲精品国产手机| 免费一级毛片在线播放| 特级精品毛片免费观看| 亚洲熟妇丰满xxxxx| 国产亚洲视频在线播放| 亚洲高清中文字幕免费| 一级特黄录像免费播放中文版| 久久精品九九亚洲精品| 国产在线a不卡免费视频| 国产在线观看免费av站| 亚洲日本乱码卡2卡3卡新区| 国产精品亚洲αv天堂无码| 在线观看免费人成视频色9| 久久免费香蕉视频| 亚洲小说图区综合在线|