小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

設(shè)計模式學(xué)習(xí)之原型模式(Prototype,創(chuàng)建型模式)(5)

 昵稱10504424 2014-01-23

在開發(fā)中如果我們希望快速的創(chuàng)建一個對象,并且該對象和原有的對象擁有相同的數(shù)據(jù),并且和原有的對象不相干,那么我們就可以這樣做

第一步:

假如我需要快速創(chuàng)建一個Person對象,然后和某個Person對象相同,如果我們我們只需要Person對象中的屬性不引用其他數(shù)據(jù)信息,可以使用淺拷貝;

如果我們需要Person對象中所有的信息,包括引用的數(shù)據(jù)信息,可以使用深拷貝

第二步:

在Person類中實(shí)現(xiàn)Cloneable接口,重寫clone()方法,如果是淺拷貝,只需要直接調(diào)用父類的clone()方法就行,如果是深拷貝,需要在clone()方法中重新開辟引用字段所需的內(nèi)存

代碼如下:

Person.java

MainClass.java

復(fù)制代碼
package com.designpattern.prototype;

import java.util.ArrayList;
import java.util.List;

public class MainClass {

    public static void main(String[] args) {
        //假如我需要快速創(chuàng)建一個Person對象,然后和某個Person對象相同,如果我們我們只需要Person對象中的屬性不引用其他數(shù)據(jù)信息,可以使用淺拷貝
        //如果我們需要Person對象中所有的信息,包括引用的數(shù)據(jù)信息,可以使用深拷貝
        /*
         * 淺拷貝
         */
//        Person person = new Person();
//        person.setName("jack");
//        person.setAge(18);
//        
//        Person person2 = person.clone();//相當(dāng)于重新開辟一塊內(nèi)存空間,和person互不干擾
//        person2.setName("jack1");
//        
//        System.out.println(person.getName());
//        System.out.println(person2.getName());
        
        Person person = new Person();
        person.setName("jack");
        person.setAge(18);
        List<String> friends = new ArrayList<String>();
        friends.add("p1");
        friends.add("p2");
        person.setFriends(friends);
        
        Person person2 = person.clone();
        person2.setName("jack1");
        friends.add("p3");//person 引用friends,friends改變,person的friends就會改變,如果用淺拷貝,person2也會跟著改變
        //如果用深拷貝,person2不會跟著改變,因為person2的friends和person的friends沒有指向同一塊內(nèi)存
        
        
        System.out.println(person.getName());
        System.out.println(person2.getName());
        System.out.println(person.getFriends());
        System.out.println(person2.getFriends());
    }

}
復(fù)制代碼

一、什么是原型模式

Prototype模式是一種對象創(chuàng)建型模式,它采取復(fù)制原型對象的方法來創(chuàng)建對象的實(shí)例。使用Prototype模式創(chuàng)建的實(shí)例,具有與原型一樣的數(shù)據(jù)。

二、原型模式的特點(diǎn)

1. 由原型對象自身創(chuàng)建目標(biāo)對象。也就是說,對象創(chuàng)建這一動作發(fā)自原型對象本身。

2.目標(biāo)對象是原型對象的一個克隆。也就是說,通過Prototype模式創(chuàng)建的對象,不僅僅與原型對象具有相同的結(jié)構(gòu),還與原型對象具有相同的值。

3.根據(jù)對象克隆深度層次的不同,有淺度克隆與深度克隆。

三、原型模式應(yīng)用場景

- 在創(chuàng)建對象的時候,我們不只是希望被創(chuàng)建的對象繼承其基類的基本結(jié)構(gòu),還希望繼承原型對象的數(shù)據(jù)。

- 希望對目標(biāo)對象的修改不影響既有的原型對象(深度克隆的時候可以完全互不影響)。

- 隱藏克隆操作的細(xì)節(jié)。很多時候,對對象本身的克隆需要涉及到類本身的數(shù)據(jù)細(xì)節(jié)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多