原型模型经过拷贝建立对象,也可归结为的建立型的设计模式。设计模式
原型模式的示例:ide
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; } }
一、实现Cloneable接口
二、调用object父类的clone方法进行拷贝。这里的拷贝是浅拷贝。this
实现深拷贝:设计
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出来一个对象的效率高点。code