国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式(6)原型模式

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式(6)原型模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、介紹

Java中自帶的原型模式是clone()方法。該方法是Object的方法,native類型。他的作用就是將對(duì)象的在內(nèi)存的那一塊內(nèi)存數(shù)據(jù)一字不差地再?gòu)?fù)制一個(gè)。我們寫簡(jiǎn)單類的時(shí)候只需要實(shí)現(xiàn)Cloneable接口,然后調(diào)用Object::clone方法就可實(shí)現(xiàn)克隆功能。這樣實(shí)現(xiàn)的方式是淺拷貝。

設(shè)計(jì)模式(6)原型模式,設(shè)計(jì),設(shè)計(jì)模式,原型模式

?1、深復(fù)制與淺復(fù)制:

(1)淺復(fù)制:被復(fù)制對(duì)象的所有變量都含有與原來的對(duì)象相同的值,而所有的對(duì)其他對(duì)象的引用都仍然指向原來的對(duì)象;

//原型類
public class Resume implements Cloneable,Serializable{
    private static final long serialVersionUID = 1L;
 
    private String name;
    private String sex;
    private String age;
 
    Resume(String name,String sex,String age){
        this.name=name;
        this.sex=sex;
        this.age=age;
    }
 
    /**
     * 設(shè)置個(gè)人信息
     * @param sex
     * @param age
     */
    public void setPersonInfo(String sex,String age){
        this.sex=sex;
        this.age=age;
    }
 
    //描述
    public void dispaly(){
        System.out.println("姓名:"+name+"\t年齡:"+age+"\t性別:"+sex);
    }
 
    public Object clone(){
        try {
            Resume resume = (Resume)super.clone();
            return resume;
        }catch (Exception e){
            return null;
        }
 
    }
 
}

? 客戶端:

public class MainTest {
    public static void main(String[] args){
 
        Resume resume = new Resume("大鳥","男","25");
 
        Resume resume2 = (Resume)resume.clone();
        resume2.setPersonInfo("男","26");
 
        resume.dispaly();
        resume2.dispaly();
 
    }
}

?(2)深復(fù)制:把引用對(duì)象的變量指向復(fù)制過的新對(duì)象,而不是原有的被引用的對(duì)象。

? ? ? 新增對(duì)象類

public class WorkExperience implements Cloneable{
 
    private String workDate;
    private String company;
 
    public WorkExperience(String workDate,String company){
        this.workDate=workDate;
        this.company=company;
    }
 
    public WorkExperience(){}
 
    /**省略set、get方法*/
 
 
    public Object clone(){
        try {
            return super.clone();
        }catch (Exception e){
            return null;
        }
 
    }
 
}
public class Resume implements Cloneable,Serializable{
    private static final long serialVersionUID = 1L;
 
    private String name;
    private String sex;
    private String age;
    private WorkExperience workExperience;
 
    Resume(String name,String sex,String age){
        this.name=name;
        this.sex=sex;
        this.age=age;
        this.workExperience=new WorkExperience();
    }
 
    /**
     * 添加私有構(gòu)造 克隆工作經(jīng)歷
     * @param workExperience
     */
    private Resume(WorkExperience workExperience){
        this.workExperience= (WorkExperience) workExperience.clone();
    }
 
    /**
     * 設(shè)置個(gè)人信息
     * @param sex
     * @param age
     */
    public void setPersonInfo(String sex,String age){
        this.sex=sex;
        this.age=age;
    }
 
    /**
     * 設(shè)置工作經(jīng)歷
     * @param workDate
     * @param company
     */
    public void setWorkExperience(String workDate, String company){
        this.workExperience.setWorkDate(workDate);
        this.workExperience.setCompany(company);
    }
 
    //描述
    public void dispaly(){
        System.out.println("姓名:"+name+"\t年齡:"+age+"\t性別:"+sex);
        System.out.println("工作經(jīng)歷:"+workExperience.getWorkDate()+"\t"+workExperience.getCompany());
    }
 
    /**
     * 重寫了克隆方法
     * @return
     */
    public Object clone(){
        try {
            Resume resume = new Resume(this.workExperience);//調(diào)用私有構(gòu)造器實(shí)現(xiàn)工作經(jīng)歷克隆
            //給對(duì)象屬性重新賦值--最終返回的是深復(fù)制的resume對(duì)象
            resume.name=this.name;
            resume.sex=this.sex;
            resume.age=this.age;
            return resume;
        }catch (Exception e){
            return null;
        }
 
    }
 
}

?客戶端

public class MainTest {
    public static void main(String[] args){
 
        Resume resume = new Resume("大鳥","男","25");
        resume.setWorkExperience("2015-2016","南京工作");
 
        Resume resume2 = (Resume)resume.clone();
        resume2.setPersonInfo("男","26");
        resume2.setWorkExperience("2016-2018","上海工作");
 
        resume.dispaly();
        resume2.dispaly();
 
    }
}

二、應(yīng)用:

1、數(shù)據(jù)集對(duì)象DataSet,有Clone()方法和Copy()方法,Clone用于復(fù)制結(jié)構(gòu)而不復(fù)制數(shù)據(jù),實(shí)現(xiàn)了原型模式的淺復(fù)制;Copy不但復(fù)制結(jié)構(gòu)也復(fù)制數(shù)據(jù),實(shí)現(xiàn)了原型模式的深復(fù)制。文章來源地址http://www.zghlxwxcb.cn/news/detail-651311.html

到了這里,關(guān)于設(shè)計(jì)模式(6)原型模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式5:原型模式

    Prototype Pattern 如果對(duì)象的創(chuàng)建成本比較大,可以基于已有的原型對(duì)象通過來創(chuàng)建新的對(duì)象,節(jié)省創(chuàng)建時(shí)間。 設(shè)計(jì)模式之原型模式 實(shí)現(xiàn)Cloneable接口的方式。這里就不展開分析淺克隆和深克隆了,后面再專門分析淺克隆和深克隆,不影響對(duì)原型模式的理解。 用序列化實(shí)現(xiàn)創(chuàng)建對(duì)

    2024年02月11日
    瀏覽(22)
  • 設(shè)計(jì)模式 - 原型模式

    傳統(tǒng)方式 優(yōu)點(diǎn): 比較好理解,簡(jiǎn)單易操作 缺點(diǎn): 在創(chuàng)建新的對(duì)象時(shí),總是需要重新獲取原始對(duì)象的屬性,如果創(chuàng)建的對(duì)象比較復(fù)雜 時(shí),效率較低 總是需要重新初始化對(duì)象,而不是動(dòng)態(tài)地獲得對(duì)象運(yùn)行時(shí)的狀態(tài), 不夠靈活 原型模式 基本介紹: 原型模式(Prototype模式)是指:用原型

    2024年02月06日
    瀏覽(25)
  • 【設(shè)計(jì)模式】原型模式

    【設(shè)計(jì)模式】原型模式

    原型模式(Prototype Pattern)是用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式之一。 這種模式是實(shí)現(xiàn)了一個(gè)原型接口,該接口用于創(chuàng)建當(dāng)前對(duì)象的克隆。當(dāng)直接創(chuàng)建對(duì)象的代價(jià)比較大時(shí),則采用這種模式。例

    2024年02月13日
    瀏覽(17)
  • 設(shè)計(jì)模式-原型模式詳解

    設(shè)計(jì)模式-原型模式詳解

    簡(jiǎn)介設(shè)計(jì)模式 設(shè)計(jì)模式是在軟件開發(fā)中常見問題的解決方案,它們是經(jīng)過實(shí)踐和經(jīng)驗(yàn)總結(jié)出來的可重用的設(shè)計(jì)思想和解決方案。設(shè)計(jì)模式通過提供通用的架構(gòu)、原則和指導(dǎo),幫助開發(fā)人員更有效地編寫高質(zhì)量的代碼。 設(shè)計(jì)模式分為三個(gè)主要類別: 創(chuàng)建型模式:關(guān)注對(duì)象的創(chuàng)

    2024年02月10日
    瀏覽(25)
  • 設(shè)計(jì)模式三(原型模式)

    在開發(fā)過程中,創(chuàng)建多個(gè)數(shù)據(jù)相同的對(duì)象,每次new都開銷比較大,在這里可以使用對(duì)象克隆,以先創(chuàng)建的原型對(duì)象為模板進(jìn)行對(duì)象的復(fù)制。這種模式是實(shí)現(xiàn)了一個(gè)原型接口,該接口用于創(chuàng)建當(dāng)前對(duì)象的克隆。當(dāng)直接創(chuàng)建對(duì)象的代價(jià)比較大時(shí),則采用這種模式。例如,一個(gè)對(duì)象

    2024年01月25日
    瀏覽(18)
  • 重溫設(shè)計(jì)模式 --- 原型模式

    原型模式 是一種創(chuàng)建型設(shè)計(jì)模式,它允許我們創(chuàng)建一個(gè)對(duì)象的副本,而不需要顯式地使用構(gòu)造函數(shù)來創(chuàng)建一個(gè)新的對(duì)象。這種模式通常用于創(chuàng)建那些具有復(fù)雜創(chuàng)建過程或需要大量資源的對(duì)象。 在原型模式中,我們首先定義一個(gè)原型接口,該接口包含一個(gè)克隆方法。然后我們

    2024年02月13日
    瀏覽(19)
  • 設(shè)計(jì)模式系列-原型模式

    設(shè)計(jì)模式系列-原型模式

    一、上篇回顧 上篇?jiǎng)?chuàng)建者模式中,我們主要講述了創(chuàng)建者的幾類實(shí)現(xiàn)方案,和創(chuàng)建者模式的應(yīng)用的場(chǎng)景和特點(diǎn),創(chuàng)建者模式適合創(chuàng)建復(fù)雜的對(duì)象,并且這些對(duì)象的每 個(gè)組成部分的詳細(xì)創(chuàng)建步驟可以是動(dòng)態(tài)的變化的,但是每個(gè)對(duì)象的組裝的過程來說可能是相對(duì)固定的或者說是

    2024年02月09日
    瀏覽(16)
  • 設(shè)計(jì)模式之原型模式筆記

    設(shè)計(jì)模式之原型模式筆記

    記錄下學(xué)習(xí)設(shè)計(jì)模式-原型模式的寫法。 意圖 :用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過復(fù)制這些原型創(chuàng)建新的對(duì)象。 結(jié)構(gòu) : 其中: Prototype聲明一個(gè)復(fù)制自身的接口。 ConcretePrototype實(shí)現(xiàn)一個(gè)復(fù)制自身的操作。 Client讓一個(gè)原型復(fù)制自身從而創(chuàng)建一個(gè)新的對(duì)象。 適用性: 當(dāng)一個(gè)

    2024年02月10日
    瀏覽(26)
  • 設(shè)計(jì)模式—原型模式(Prototype)

    設(shè)計(jì)模式—原型模式(Prototype)

    目錄 一、什么是原型模式? 二、原型模式具有什么優(yōu)缺點(diǎn)嗎? 三、有什么缺點(diǎn)? 四、什么時(shí)候用原型模式? 五、代碼展示 ①、簡(jiǎn)歷代碼初步實(shí)現(xiàn) ②、原型模式 ③、簡(jiǎn)歷的原型實(shí)現(xiàn) ④、深復(fù)制 ⑤、淺復(fù)制 用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的

    2024年02月11日
    瀏覽(19)
  • Unity設(shè)計(jì)模式——原型模式

    Unity設(shè)計(jì)模式——原型模式

    ????????原型模式 (Prototype)用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象。原型模式其實(shí)就是 從一個(gè)對(duì)象再創(chuàng)建另外一個(gè)可定制的對(duì)象 ,而且不需知道任何創(chuàng)建的細(xì)節(jié) 。 原型類 Prototype: ?ConcretePrototypel類,具體原型 客戶端: 由于克隆實(shí)在太

    2024年02月07日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包