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

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

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

    夢幻之旅

    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 閱讀(220) 評論(0)  編輯  收藏 所屬分類: Design Patterns
    主站蜘蛛池模板: 噜噜综合亚洲AV中文无码| 免费乱理伦在线播放| 亚洲精品中文字幕| 1024免费福利永久观看网站| 亚洲精品宾馆在线精品酒店 | 国产一区二区三区免费看| 中文字幕的电影免费网站| 亚洲三级视频在线| 很黄很色很刺激的视频免费| 男男gay做爽爽的视频免费| 亚洲AV无码一区二区二三区入口 | 久青草视频在线观看免费| 亚洲伊人久久综合影院| 性xxxxx大片免费视频| 亚洲精品国产情侣av在线| 我要看免费的毛片| 国产精品亚洲综合| 亚洲香蕉免费有线视频| 亚洲免费网站观看视频| 亚洲AV永久无码精品一福利| 亚洲国产成人片在线观看无码 | AV无码免费永久在线观看| a毛片成人免费全部播放| 亚洲 欧洲 自拍 另类 校园| 亚洲日本va在线视频观看| 无码国产精品一区二区免费16| 日韩欧美亚洲中文乱码| 亚洲精品视频在线观看免费 | 亚洲精品高清国产一久久| 99久久精品日本一区二区免费 | 中文字幕av免费专区| 亚洲AV无码国产剧情| 亚洲在成人网在线看| 久久精品国产亚洲一区二区| 免费人成年激情视频在线观看| 日韩免费精品视频| 91香蕉国产线观看免费全集| 国产在线播放线91免费| 麻豆一区二区三区蜜桃免费| 亚洲日韩一区精品射精| 亚洲av永久无码精品三区在线4|