摘要:原型模型通过拷贝创建对象,也可归结为的创建型的设计模式。原型模式的示例实现接口调用父类的方法进行拷贝。实现深拷贝这种方式是先分配内存大小,然后通过内存块的复制操作来实现赋值的,效率可能会比出来一个对象的效率高点。
原型模型通过拷贝创建对象,也可归结为的创建型的设计模式。
原型模式的示例:
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、实现Cloneable接口
2、调用object父类的clone方法进行拷贝。这里的拷贝是浅拷贝。
实现深拷贝:
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这种方式是先分配内存大小,然后通过内存块的复制操作来实现赋值的,效率可能会比new出来一个对象的效率高点。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66707.html
摘要:首先,需要来理清一些基础的计算机编程概念编程哲学与设计模式计算机编程理念源自于对现实抽象的哲学思考,面向对象编程是其一种思维方式,与它并驾齐驱的是另外两种思路过程式和函数式编程。 JavaScript 中的原型机制一直以来都被众多开发者(包括本人)低估甚至忽视了,这是因为绝大多数人没有想要深刻理解这个机制的内涵,以及越来越多的开发者缺乏计算机编程相关的基础知识。对于这样的开发者来说 J...
摘要:于是就有了构造函数和原型模式混合模式组合使用构造函数模式和原型模式创建自定义类型最常见的方式,就是组合模式。 创建对象 JS有六种数据数据类型,其中五种属于基本数据类型:Null、Boolean、undefined、String、Number。而其它值都是对象。数组是对象,函数是对象,正则表达式是对象。对象也是对象。 来看一下对象的定义: 无序属性的集合,其属性可以包含基本值、对象、或...
摘要:创建构造函数后,其原型对象默认只会取得属性至于其他的方法都是从继承来的。上图展示了构造函数的原型对象和现有的两个实例之间的关系。所有原生的引用类型都在其构造函数的原型上定义了方法。 第6章我一共写了3篇总结,下面是相关链接:读《javaScript高级程序设计-第6章》之理解对象读《javaScript高级程序设计-第6章》之继承 工厂模式 所谓的工厂模式就是,把创建具体对象的过程抽象...
摘要:目录导语理解对象和面向对象的程序设计创建对象的方式的继承机制原型对象原型链与原型对象相关的方法小结导语前面的系列文章,基本把的核心知识点的基本语法标准库等章节讲解完本章开始进入核心知识点的高级部分面向对象的程序设计,这一部分的内容将会对对象 目录 导语 1.理解对象和面向对象的程序设计 2.创建对象的方式 3.JavaScript的继承机制 3.1 原型对象 3.2 原型链 3.3 与...
阅读 3842·2021-11-22 15:11
阅读 5131·2021-11-18 13:15
阅读 2917·2019-08-29 14:08
阅读 3814·2019-08-26 13:49
阅读 3321·2019-08-26 12:17
阅读 3563·2019-08-26 11:54
阅读 3378·2019-08-26 10:58
阅读 2275·2019-08-26 10:21