摘要:原型模型通過拷貝創(chuàng)建對象,也可歸結(jié)為的創(chuàng)建型的設(shè)計模式。原型模式的示例實現(xiàn)接口調(diào)用父類的方法進行拷貝。實現(xiàn)深拷貝這種方式是先分配內(nèi)存大小,然后通過內(nèi)存塊的復制操作來實現(xiàn)賦值的,效率可能會比出來一個對象的效率高點。
原型模型通過拷貝創(chuàng)建對象,也可歸結(jié)為的創(chuàng)建型的設(shè)計模式。
原型模式的示例:
public class Prototype { public static void main(String[] args) { Field field = new Field("code"); System.out.println("field=[" + field + "]"); field.setCode("codedes"); Field fieldCopy = field.clone(); System.out.println("fieldCopy=[" + fieldCopy + "]"); } } class Field implements Cloneable { private String code; public Field(String code) { this.code = code; } public void setCode(String code) { this.code = code; } @Override public String toString() { return "Field{" + "code="" + code + """ + "}"; } public Field clone() { Field field = null; try { field = (Field) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } return field; } }
1、實現(xiàn)Cloneable接口
2、調(diào)用object父類的clone方法進行拷貝。這里的拷貝是淺拷貝。
實現(xiàn)深拷貝:
public class Prototype { public static void main(String[] args) { Field field = new Field("code", new Type("string")); System.out.println("field=[" + field + "]"); field.setCode("codedes"); Field fieldCopy = field.clone(); System.out.println("fieldCopy=[" + fieldCopy + "]"); } } class Type implements Cloneable { private String typeName; public Type(String typeName) { this.typeName = typeName; } public Type clone(){ Type type = null; try { type = (Type) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return type; } } class Field implements Cloneable { private String code; private Type type; public Field(String code, Type type) { this.code = code; this.type = type; } public void setCode(String code) { this.code = code; } @Override public String toString() { return "Field{" + "code="" + code + """ + ", type=" + type + "}"; } public Field clone() { Field field = null; try { field = (Field) super.clone(); field.type = type.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return field; } }
clone這種方式是先分配內(nèi)存大小,然后通過內(nèi)存塊的復制操作來實現(xiàn)賦值的,效率可能會比new出來一個對象的效率高點。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66707.html
摘要:首先,需要來理清一些基礎(chǔ)的計算機編程概念編程哲學與設(shè)計模式計算機編程理念源自于對現(xiàn)實抽象的哲學思考,面向?qū)ο缶幊淌瞧湟环N思維方式,與它并駕齊驅(qū)的是另外兩種思路過程式和函數(shù)式編程。 JavaScript 中的原型機制一直以來都被眾多開發(fā)者(包括本人)低估甚至忽視了,這是因為絕大多數(shù)人沒有想要深刻理解這個機制的內(nèi)涵,以及越來越多的開發(fā)者缺乏計算機編程相關(guān)的基礎(chǔ)知識。對于這樣的開發(fā)者來說 J...
摘要:于是就有了構(gòu)造函數(shù)和原型模式混合模式組合使用構(gòu)造函數(shù)模式和原型模式創(chuàng)建自定義類型最常見的方式,就是組合模式。 創(chuàng)建對象 JS有六種數(shù)據(jù)數(shù)據(jù)類型,其中五種屬于基本數(shù)據(jù)類型:Null、Boolean、undefined、String、Number。而其它值都是對象。數(shù)組是對象,函數(shù)是對象,正則表達式是對象。對象也是對象。 來看一下對象的定義: 無序?qū)傩缘募希鋵傩钥梢园局怠ο蟆⒒?..
摘要:將構(gòu)造函數(shù)的作用域賦值給新對象因此指向了新對象執(zhí)行構(gòu)造函數(shù)的代碼為這個新對象添加屬性返回對象最初是用來標識對象類型的。但提到檢測對象類型,還是使用將構(gòu)造函數(shù)當作函數(shù)構(gòu)造函數(shù)與其他函數(shù)唯一區(qū)別。 創(chuàng)建對象 雖然Object構(gòu)造函數(shù)與對象字面量都能創(chuàng)建單個對象, 但這些方式都有明顯的缺點: 使用同一個接口創(chuàng)建很多對象, 會產(chǎn)生大量重復代碼。 var obj = {}; //對象字面量 va...
摘要:創(chuàng)建構(gòu)造函數(shù)后,其原型對象默認只會取得屬性至于其他的方法都是從繼承來的。上圖展示了構(gòu)造函數(shù)的原型對象和現(xiàn)有的兩個實例之間的關(guān)系。所有原生的引用類型都在其構(gòu)造函數(shù)的原型上定義了方法。 第6章我一共寫了3篇總結(jié),下面是相關(guān)鏈接:讀《javaScript高級程序設(shè)計-第6章》之理解對象讀《javaScript高級程序設(shè)計-第6章》之繼承 工廠模式 所謂的工廠模式就是,把創(chuàng)建具體對象的過程抽象...
摘要:目錄導語理解對象和面向?qū)ο蟮某绦蛟O(shè)計創(chuàng)建對象的方式的繼承機制原型對象原型鏈與原型對象相關(guān)的方法小結(jié)導語前面的系列文章,基本把的核心知識點的基本語法標準庫等章節(jié)講解完本章開始進入核心知識點的高級部分面向?qū)ο蟮某绦蛟O(shè)計,這一部分的內(nèi)容將會對對象 目錄 導語 1.理解對象和面向?qū)ο蟮某绦蛟O(shè)計 2.創(chuàng)建對象的方式 3.JavaScript的繼承機制 3.1 原型對象 3.2 原型鏈 3.3 與...
閱讀 3559·2021-11-22 15:11
閱讀 4634·2021-11-18 13:15
閱讀 2702·2019-08-29 14:08
閱讀 3576·2019-08-26 13:49
閱讀 3091·2019-08-26 12:17
閱讀 3288·2019-08-26 11:54
閱讀 3111·2019-08-26 10:58
閱讀 2031·2019-08-26 10:21