我的漫漫程序之旅

          專(zhuān)注于JavaWeb開(kāi)發(fā)
          隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
          數(shù)據(jù)加載中……

          Java Prototype模式的學(xué)習(xí)(原型模式)

           原型模式定義: 用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象.

              Prototype模式允許一個(gè)對(duì)象再創(chuàng)建另外一個(gè)可定制的對(duì)象,根本無(wú)需知道任何如何創(chuàng)建的細(xì)節(jié),工作原理是:通過(guò)將一個(gè)原型對(duì)象傳給那個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象,這個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象通過(guò)請(qǐng)求原型對(duì)象拷貝它們自己來(lái)實(shí)施創(chuàng)建。

          如何使用? 因?yàn)镴ava中的提供clone()方法來(lái)實(shí)現(xiàn)對(duì)象的克隆,所以Prototype模式實(shí)現(xiàn)一下子變得很簡(jiǎn)單.

          以勺子為例:

          package com.pattern.prototype;

          /**
           * 原型類(lèi)(以湯匙為例) ,注意要實(shí)現(xiàn)Cloneable接口
           * 
           * 
          @author zdw
           * 
           
          */

          public abstract class AbstractSpoon implements Cloneable
          {
              
          public String spoonName;

              
          public String getSpoonName()
              
          {
                  
          return this.spoonName;
              }


              
          public void setSpoonName(String spoonName)
              
          {
                  
          this.spoonName = spoonName;
              }


              
          /**
               * 重寫(xiě)clone()方法
               
          */

              @Override
              
          public Object clone()
              
          {
                  
          try
                  
          {
                      
          return super.clone();
                  }
           catch (CloneNotSupportedException e)
                  
          {
                      System.out.println(
          "此對(duì)象不支持復(fù)制");
                  }

                  
          return null;
              }

          }


          對(duì)原型的具體實(shí)現(xiàn):
          package com.pattern.prototype;

          /**
           * 給原型對(duì)象賦值
           * 
           * 
          @author zdw
           * 
           
          */

          public class SoupSpoon extends AbstractSpoon
          {
              
          public SoupSpoon()
              
          {
                  setSpoonName(
          "chinaDrong");
              }

          }


          測(cè)試類(lèi):
          package com.pattern.prototype;

          /*******************************************************************************
           * 測(cè)試類(lèi)
           * 
           * 
          @author zdw
           * 
           
          */

          public class Client
          {
              
          public static void main(String[] args)
              
          {
                  AbstractSpoon spoon 
          = new SoupSpoon();
                  System.out.println(spoon.getSpoonName());
                  
          // 通過(guò)對(duì)象的clone()方法,即可獲得對(duì)象的一個(gè)copy.
                  AbstractSpoon spoon2 = (AbstractSpoon) spoon.clone();
                  System.out.println(spoon2.getSpoonName());
              }

          }

          當(dāng)然也可以結(jié)合工廠模式來(lái)創(chuàng)建AbstractSpoon實(shí)例。

          在Java中Prototype模式變成clone()方法的使用,由于Java的純潔的面向?qū)ο筇匦裕沟迷贘ava中使用設(shè)計(jì)模式變得很自然,兩者已經(jīng)幾乎是渾然一體了。這反映在很多模式上,如Interator遍歷模式。



          posted on 2008-05-26 09:39 々上善若水々 閱讀(1685) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)模式

          主站蜘蛛池模板: 长丰县| 宜宾市| 霍山县| 临城县| 白河县| 保定市| 长汀县| 哈巴河县| 湄潭县| 临城县| 信阳市| 钦州市| 阿克陶县| 宽城| 甘德县| 澄城县| 且末县| 钦州市| 民权县| 克什克腾旗| 华坪县| 潜山县| 台前县| 偃师市| 武平县| 民乐县| 钟祥市| 额尔古纳市| 德州市| 柘城县| 延边| 卫辉市| 永胜县| 北安市| 雷州市| 崇文区| 固镇县| 台州市| 灵川县| 泾川县| 永平县|