国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

原始模型模式

2019-11-18 15:36:30
字體:
來源:轉載
供稿:網友

        原始模型模式,我認為也可以稱為克隆模式,就是由一個完整的產品對象復制出另一個對象的模式。它也是對象的創建模式,但是只與原始對象有關,不需要工廠類。

        原始模型模式最成功的應用之一就是Object類的clone方法,可能由于這種方法的存在,很多人沒有意識到原始模型模式是一種特定的創建模式。但是,它的確是一種產生對象的模式,而且clone方法所實現的只是原始模型模式的一種情況。
        原始模型模式的對象創建方式有兩種,可以分別稱為淺復制和深復制:淺復制就是從原對象復制出新的對象時,并不復制它的成員對象,即它的成員對象句柄所指向的還是原對象中的成員對象;深復制就是在新對象中,成員對象也是新的。
Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
原始模型模式(圖一)package PRototype;
原始模型模式(圖一)
原始模型模式(圖二)原始模型模式(圖三)public interface Prototype ...{
原始模型模式(圖四)
原始模型模式(圖四)    public void printPart();
原始模型模式(圖四)    
原始模型模式(圖四)    Object flatClone();
原始模型模式(圖四)    
原始模型模式(圖四)    Object deepClone() throws Exception;
原始模型模式(圖四)    
原始模型模式(圖五)}
原始模型模式(圖一)
原始模型模式(圖一)
原始模型模式(圖一)package prototype;
原始模型模式(圖一)
原始模型模式(圖一)import java.io.*;
原始模型模式(圖一)
原始模型模式(圖二)原始模型模式(圖三)public class ConcretePrototype implements Prototype , Serializable...{
原始模型模式(圖四)
原始模型模式(圖四)    private Part part;
原始模型模式(圖四)    
原始模型模式(圖六)原始模型模式(圖七)    public ConcretePrototype() ...{
原始模型模式(圖四)        part = new Part();
原始模型模式(圖八)    }
原始模型模式(圖四)    
原始模型模式(圖六)原始模型模式(圖七)    public void printPart() ...{
原始模型模式(圖四)        System.out.println(part);
原始模型模式(圖八)    }
原始模型模式(圖四)    
原始模型模式(圖四)
原始模型模式(圖六)原始模型模式(圖七)    public Object flatClone() ...{
原始模型模式(圖四)        ConcretePrototype cp = new ConcretePrototype();
原始模型模式(圖四)        cp.part = this.part;
原始模型模式(圖四)        return cp;
原始模型模式(圖八)    }
原始模型模式(圖四)
原始模型模式(圖四)    
原始模型模式(圖六)原始模型模式(圖七)    public Object deepClone() throws Exception ...{
原始模型模式(圖四)        ByteArrayOutputStream bo = new ByteArrayOutputStream();
原始模型模式(圖四)        ObjectOutputStream oo = new ObjectOutputStream(bo);
原始模型模式(圖四)        oo.writeObject(this);
原始模型模式(圖四)        ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
原始模型模式(圖四)        ObjectInputStream oi = new ObjectInputStream(bi);
原始模型模式(圖四)        return (oi.readObject());
原始模型模式(圖八)    }
原始模型模式(圖四)
原始模型模式(圖六)原始模型模式(圖七)    class Part implements Serializable ...{
原始模型模式(圖四)        
原始模型模式(圖八)    }
原始模型模式(圖四)    
原始模型模式(圖五)}
原始模型模式(圖一)
原始模型模式(圖一)
原始模型模式(圖一)package prototype;
原始模型模式(圖一)
原始模型模式(圖二)原始模型模式(圖三)public class Client ...{
原始模型模式(圖四)    
原始模型模式(圖六)原始模型模式(圖七)    public static void main(String[] args) throws Exception ...{
原始模型模式(圖四)        ConcretePrototype originate, cloned, deepCloned;
原始模型模式(圖四)        originate = new ConcretePrototype();
原始模型模式(圖四)
原始模型模式(圖四)        Thread.sleep(2000);
原始模型模式(圖四)
原始模型模式(圖四)        cloned = (ConcretePrototype)originate.flatClone();
原始模型模式(圖四)        deepCloned = (ConcretePrototype)originate.deepClone();
原始模型模式(圖四)        System.out.println(originate);
原始模型模式(圖四)        System.out.println(cloned);
原始模型模式(圖四)        System.out.println(deepCloned);
原始模型模式(圖四)        originate.printPart();
原始模型模式(圖四)        cloned.printPart();
原始模型模式(圖四)        deepCloned.printPart();
原始模型模式(圖八)    }
原始模型模式(圖四)
原始模型模式(圖五)}
原始模型模式(圖一)
 

    下面是這段代碼的打印:

prototype.ConcretePrototype@1034bb5
prototype.ConcretePrototype@19efb05
prototype.ConcretePrototype@723d7c
prototype.ConcretePrototype$Part@b162d5
prototype.ConcretePrototype$Part@b162d5
prototype.ConcretePrototype$Part@22c95b

        可以看出,打印的前三行各不相同,這說明通過淺復制和深復制,所得到的對象都是與原對象不同的;打印的后三行中有兩行相同,這說明,在淺復制時,成員對象的實體沒有被復制,只是復制了其句柄,而深復制時,成員對象的實體也被復制了。

進入討論組討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邯郸市| 巴东县| 英德市| 三门峡市| 西林县| 乐安县| 新建县| 延长县| 青岛市| 霞浦县| 永靖县| 拜城县| 平果县| 云安县| 获嘉县| 新兴县| 当涂县| 兴安县| 杨浦区| 云霄县| 东乡县| 富蕴县| 铜梁县| 辽中县| 五家渠市| 玉环县| 水城县| 东至县| 西乡县| 宿松县| 南乐县| 团风县| 罗城| 三门峡市| 邮箱| 本溪| 若尔盖县| 南通市| 静宁县| 乌苏市| 常宁市|