posts - 297,  comments - 1618,  trackbacks - 0

          ??? 原型模式屬于對象的創建模式。
          1. 定義
          ???? 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象.
          2. 工作原理
          ????? 通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象請求原型對象拷貝它們自己來實施創建.
          ?????
          3. 使用方法
          ???? Java語言的構件模型直接支持原始模型模式.所有的JavaBean都繼承自java.lang.Object,而Object類提供一個clone()方法,可以將一個JavaBean對象復制一份.但是,這個JavaBean必須實現一個標識接口Cloneable,表明這個JavaBean支持復制.
          4. 經典應用場景
          ??? 孫悟空在與黃風怪的戰斗中,使用了一個身外身的手段,叫聲"變",變出來百來個行者.這中手段在面向對象領域里就是原型模式.
          ??? 嘿嘿,我也用這種方法來“變”出幾個Amigo來,嘻嘻,一個去工作,一個去談戀愛,一個去跟朋友玩,一個去跟家人逛吧......
          ??? 看我的......

          /**
          ?*?設計模式-原型模式
          ?*?
          @author ?Amigo?Xie(xiexingxing1121@126.com)
          ?*?
          @since ?2007/03/13?22:20
          ?
          */

          class ?CloneAmigo? implements ?Cloneable? {
          ????
          /** ?身高(單位:cm) */
          ????
          private ? int ?height;
          ????
          ????
          /** ?體重(單位:kg) */
          ????
          private ? int ?weight;
          ????
          ????
          /** ?年齡 */
          ????
          private ? int ?age;

          ????
          /**
          ?????*?構造函數
          ?????*?
          @param ?height?
          ?????*?
          @param ?weight
          ?????*?
          @param ?age
          ?????
          */

          ????
          public ?CloneAmigo( int ?height,? int ?weight,? int ?age)? {
          ????????
          this .height? = ?height;
          ????????
          this .weight? = ?weight;
          ????????
          this .age? = ?age;??
          ????}

          ????
          ????
          public ?Object?clone()? {
          ????????
          // 創建一個本類對象,并返回給調用者
          ?
          ????????CloneAmigo?temp? = ? new??CloneAmigo(height,?weight,?age);
          ????????
          return?(Object)temp;
          ????}


          ????
          public ? void ?setHeight( int ?height)? {????
          ????????
          this .age? = ?age;
          ????}


          ????pubiic?
          int ?getHeight()? {
          ????????
          return ?height;
          ????}


          ????
          public ? void ?setWeight( int ?weight)? {
          ????????
          this .weight? = ?weight;
          ????}


          ????
          public ? int ?getWeight()? {
          ????????
          return ?weight;
          ????}


          ????
          public ? void ?setAge( int ?age)? {
          ????????
          this .age? = ?age;
          ????}


          ????
          public ? void ?getAge()? {
          ????????
          return ?age;
          ????}


          }

          ??? 測試類的代碼如下:

          public ? class ??Client? {
          ????
          public ? static ? void ?main(String[]?args)? {
          ????????CloneAmigo?amigo1?
          = ? new??CloneAmigo?(158,?45,?24);
          ????????
          //通過對一個Amigo進行克隆得到第二個Amigo
          ????????CloneAmigo?amigo2?=?(CloneAmigo?)?amigo1.clone();
          ????????System.out.println(
          "第一個Amigo的身高:?"?+?amigo1.getHeight());
          ????????System.out.println(
          "第二個Amigo的身高:?"?+?amigo2.getHeight());

          ????????System.out.println(
          "第一個Amigo的體重:?"?+?amigo1.getWeight());
          ????????System.out.println(
          "第二個Amigo的體重:?"?+?amigo2.getWeight());

          ????????System.out.println(
          "第一個Amigo的年齡:?"?+?amigo1.getAge());
          ????????System.out.println(
          "第二個Amigo的年齡:?"?+?amigo2.getAge());
          ????}

          }

          ????? 從運行結果可看出兩個Amigo的身高、體重、年齡都是一樣的。
          5. 重點關注----克隆滿足的條件
          ?????
          1)克隆的對象與原對象不是同一個對象;
          ????? 2)克隆對象與原對象的類型一樣;
          ????? 3)如果對象x的equals()方法定義恰當的話,那么x.clone().equals(x)應當是成立的。

          參考書籍:《Java與模式》
          ????????????????????《Patterns in Java》
          posted on 2007-03-13 23:20 阿蜜果 閱讀(3120) 評論(6)  編輯  收藏 所屬分類: Design Pattern


          FeedBack:
          # fiaxqqfo
          2007-03-13 23:35 | fiaxqqfo
          [URL=http://ximiqfkw.com]nncsodro[/URL] fqahexya http://bfrjeiou.com rfcdyasm btzsbmxa <a href="http://flqngefl.com">dhmiotcj</a>   回復  更多評論
            
          # re: 設計模式學習筆記--原型(Prototype)
          2007-03-14 00:19 | popo
          寫的很不錯,能否交換個blog鏈接?嘿嘿  回復  更多評論
            
          # re: 設計模式學習筆記--原型(Prototype)[未登錄]
          2007-03-14 08:45 | 阿蜜果
          好噢,嘻嘻  回復  更多評論
            
          # re: 設計模式學習筆記--原型(Prototype)[未登錄]
          # re: 設計模式學習筆記--原型(Prototype)
          2007-03-14 08:57 | Tortoise
          好東西??!  回復  更多評論
            
          # re: 設計模式學習筆記--原型(Prototype)[未登錄]
          2007-03-19 00:35 | TonySoft
          學以至用  回復  更多評論
            
          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296329
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙山县| 鄱阳县| 平泉县| 崇仁县| 潮州市| 济阳县| 故城县| 卓尼县| 教育| 安塞县| 鄯善县| 中牟县| 桓台县| 微山县| 徐汇区| 江阴市| 许昌县| 郓城县| 大埔县| 炎陵县| 洛阳市| 张家口市| 苏尼特左旗| 华池县| 峨山| 汝城县| 青浦区| 拉孜县| 瑞金市| 西青区| 东乡县| 平安县| 海伦市| 元谋县| 张北县| 武宁县| 渝中区| 香格里拉县| 仙居县| 景德镇市| 揭阳市|