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

          積分與排名

          • 積分 - 2296320
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 盐亭县| 济源市| 敦化市| 天柱县| 同江市| 兖州市| 遂溪县| 凭祥市| 北宁市| 思南县| 拉孜县| 安义县| 古丈县| 海原县| 望都县| 广西| 太和县| 安泽县| 丰县| 封丘县| 淮南市| 凌海市| 都匀市| 平阳县| 搜索| 富民县| 杭州市| 裕民县| 三台县| 寿阳县| 黎平县| 锡林浩特市| 理塘县| 保定市| 锦州市| 陆丰市| 岑巩县| 宝鸡市| 藁城市| 灵寿县| 馆陶县|