内容简介:用于创建重复的对象,同时又能保证性能。通俗的讲,原型模式就是克隆对象,直接copy字节码,不走构造方法,性能非常高。ORM中经常用到。只支持9种数据类型的深拷贝: 8大基本类型实现Cloneable接口,并且重写clone()方法。
用于创建重复的对象,同时又能保证性能。通俗的讲,原型模式就是克隆对象,直接copy字节码,不走构造方法,性能非常高。ORM中经常用到。
注意
只支持9种数据类型的深拷贝: 8大基本类型 (int long float double boolean char short byte )
+ String
其他(List等)数据类型默认都是浅拷贝,但是我们也能通过他们自身的clone方法来深拷贝。
List list = new ArrayList(); List cloneList = (List) ((ArrayList) list).clone(); 复制代码
Prototype.java
实现Cloneable接口,并且重写clone()方法。
public class Prototype implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } 复制代码
注:如果不实现该接口而直接调用clone()方法会抛出CloneNotSupportedException异常
PeoplePrototype.java
人原型,用来做被拷贝的对象。
public class PeoplePrototype extends Prototype{ private int age; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 复制代码
Main.java
public class Main { public static void main(String[] args) { PeoplePrototype prototype = new PeoplePrototype(); prototype.setAge(20); prototype.setName("FantJ"); try { PeoplePrototype clone = (PeoplePrototype)prototype.clone(); System.out.println(clone.getAge()); System.out.println(clone == prototype); System.out.println(clone+" "+prototype); System.out.println(clone.getClass() +" "+ prototype.getClass()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } 复制代码
控制台打印:
20 false com.fantj.prototype.ConcretePrototype@6d6f6e28 com.fantj.prototype.ConcretePrototype@135fbaa4 class com.fantj.prototype.ConcretePrototype class com.fantj.prototype.ConcretePrototype 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。