夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          原型模式
               原型模式是在已指定對象的基礎上,然后通過拷貝這些原型對象創建新的對象。
          原型模式有兩個組成部份
          1.抽象原型
          2.具體原型
          例子:
          1.抽象原型
          package prototype;

          /**
           * <ul>
           * <li>Title:[Prototype]</li>
           * <li>Description: [抽象原型]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public interface Prototype
          {   
              
          /**
               * <ul>
               * <li>Description:[原型接口聲明]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @return
               * 
          @throws CloneNotSupportedException
               
          */

              
          public Object cloneMe() throws CloneNotSupportedException;
          }

          2.具體原型1
          package prototype;

          /**
           * <ul>
           * <li>Title:[Circle]</li>
           * <li>Description: [圓類]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public class Circle implements Prototype, Cloneable
          {
              
          /** 半徑 */
              
          private double radius;
              
              
          /**
               * <ul>
               * <li>Description:[構造方法]</li>
               * <ul>
               * 
               * 
          @param radius
               
          */

              
          public Circle(double radius)
              
          {
                  
          this.radius = radius;
              }

              
              
          /* (non-Javadoc)
               * @see prototype.Prototype#cloneMe()
               
          */

              
          public Object cloneMe() throws CloneNotSupportedException
              
          {
                  Circle obj 
          = (Circle)clone();
                  
          return obj;
              }

              
              
          public double getRadius()
              
          {
                  
          return radius;
              }

              
              
          public void setRadius(double radius)
              
          {
                  
          this.radius = radius;
              }

          }


          3.具體原型2
          package prototype;

          import java.io.ByteArrayInputStream;
          import java.io.ByteArrayOutputStream;
          import java.io.ObjectInputStream;
          import java.io.ObjectOutputStream;
          import java.io.Serializable;

          /**
           * <ul>
           * <li>Title:[Triangle]</li>
           * <li>Description: [三角形,用序列化的方式復制]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          @SuppressWarnings(
          "serial")
          public class Triangle implements Prototype, Serializable
          {
              
          /** a邊 */
              
          private double a;
              
              
          /** b邊 */
              
          private double b;
              
              
          /** c邊 */
              
          private double c;
              
              
          /**
               * <ul>
               * <li>Description:[測試信息]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public void getDebugInfo()
              
          {
                  StringBuffer debuginfo 
          = new StringBuffer();
                  debuginfo.append(
          "原實例三邊信息-> ");
                  debuginfo.append(
          "a:").append(a).append("");
                  debuginfo.append(
          "b:").append(a).append("");
                  debuginfo.append(
          "c:").append(a);
                  System.out.println(debuginfo);
              }

              
              
          /* (non-Javadoc)
               * @see prototype.Prototype#cloneMe()
               
          */

              
          public Object cloneMe() throws CloneNotSupportedException
              
          {
                  Object obj 
          = null;
                  
          try
                  
          {
                      ByteArrayOutputStream outOne 
          = new ByteArrayOutputStream();
                      ObjectOutputStream outTwo 
          = new ObjectOutputStream(outOne);
                      outTwo.writeObject(
          this);
                      
                      ByteArrayInputStream inOne 
          = new ByteArrayInputStream(outOne.toByteArray());
                      ObjectInputStream inTwo 
          = new ObjectInputStream(inOne);
                      obj 
          = inTwo.readObject();
                  }

                  
          catch(Exception ex)
                  
          {
                      ex.printStackTrace();
                  }

                  
          return obj;
              }

              
              
          public double getA()
              
          {
                  
          return a;
              }

              
              
          public void setA(double a)
              
          {
                  
          this.a = a;
              }

              
              
          public double getB()
              
          {
                  
          return b;
              }

              
              
          public void setB(double b)
              
          {
                  
          this.b = b;
              }

              
              
          public double getC()
              
          {
                  
          return c;
              }

              
              
          public void setC(double c)
              
          {
                  
          this.c = c;
              }

          }


          4.測試類
          package prototype;


          /**
           * <ul>
           * <li>Title:[Test]</li>
           * <li>Description: [測試類]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public class Test
          {   
               
          public static void main(String[] args) throws CloneNotSupportedException
               
          {
                   Circle circle 
          = new Circle(10);
                   System.out.println(
          "原實例半徑: " + circle.getRadius());
                   Circle copyCircle 
          = (Circle)circle.cloneMe();
                   System.out.println(
          "復制例半徑: " + copyCircle.getRadius());
                   copyCircle.setRadius(
          20);
                   System.out.println(
          "原實例半徑: " + circle.getRadius());
                   System.out.println(
          "復制例半徑: " + copyCircle.getRadius());
                   
                   Triangle triangle 
          = new Triangle();
                   triangle.setA(
          10);
                   triangle.setB(
          20);
                   triangle.setC(
          30);
                   triangle.getDebugInfo();
                    
                   Triangle copyTriangle 
          = (Triangle)triangle.cloneMe();
                   copyTriangle.getDebugInfo();
                   copyTriangle.setA(
          11);
                   copyTriangle.setB(
          21);
                   copyTriangle.setC(
          31);
                   copyTriangle.getDebugInfo();
               }

          }


          總結:原型模式在生成復雜對象比較苦難的環境中比較適用,通過克隆已有對象來實現創建新的對象,節省了時間和空間。
          posted on 2011-08-02 01:09 HUIKK 閱讀(223) 評論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 酒泉市| 镇宁| 马鞍山市| 陆良县| 文安县| 涞水县| 安平县| 南雄市| 怀柔区| 芮城县| 桐城市| 寿宁县| 屏山县| 安宁市| 河北区| 贡觉县| 当雄县| 秭归县| 湘乡市| 贞丰县| 年辖:市辖区| 黑龙江省| 中阳县| 瑞丽市| 泰来县| 温州市| 静海县| 石城县| 酒泉市| 竹溪县| 斗六市| 泰兴市| 云南省| 昌平区| 林甸县| 宜丰县| 禹城市| 特克斯县| 琼中| 肇东市| 方山县|