用原型实例指定建立对象的种类,而且经过拷贝这些原型建立新的对象java
Java自带一个
Cloneable
接口,原型类实现该接口并重写clone
方法,经过调用该方法建立新的对象。这种不经过new
关键字来产生一个对象,而是经过对象复制来实现的模式叫作原型模式。数组
原型类安全
public class PrototypeClass implements Cloneable { @Override protected Object clone() { PrototypeClass prototypeClass = null; try { prototypeClass = (PrototypeClass) super.clone(); } catch (CloneNotSupportedException cloneNotSupportedException) { // TODO 异常处理 } return prototypeClass; } }
new
关键字建立对象性能好不少。实际项目中,原型模式不多单独出现。通常和工厂方法模式结合使用,经过clone方法建立对象,并由工厂方法提供给调用者。ide
即逃避构造函数的约束。函数
若原型类中存在属性为引用对象类型时,Java作了一个偷懒的拷贝动做,Object类提供的方法只是clone本对象,对其内部的数组,引用对象等都不拷贝,仍是指向原生对象的地址,即引用赋值而不是对象赋值,而基本类型都会被拷贝,这种拷贝就叫作浅拷贝。对于String
类型,没有clone方法,经过字符串池在内存中建立新字符串,所以使用时String同基本类型效果一致。性能
想实现对象的深刻拷贝须要在原型类的clone
方法中对引用类型的对象属性再次调用clone
方法。优化
对象的clone
与final
关键字是有冲突的,要使用clone方法,原型类的成员变量上不要增长final
关键字。prototype