乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       昵稱10504424 2014-01-23

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

      第一步:

      假如我需要快速創(chuàng)建一個(gè)Person對象,然后和某個(gè)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)建一個(gè)Person對象,然后和某個(gè)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就會(huì)改變,如果用淺拷貝,person2也會(huì)跟著改變
              //如果用深拷貝,person2不會(huì)跟著改變,因?yàn)閜erson2的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)建這一動(dòng)作發(fā)自原型對象本身。

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

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

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

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

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

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多