开篇
对于Cloneable接口不了解的可以参照Java技巧------Cloneable接口与clone方法,我们主要围绕这一接口来聊一聊原型模式。
核心思想
使用原型实例来确定对象的种类,使用clone方法实现对于这些原型的拷贝,产生新的对象。不通过new来产生对象而是通过clone方法复制对象的的模式为原型模式。
简单实现
public class A implements Cloneable{
private int param;
private String s;
public String getS() {
return s;
}
public int getParam() {
return param;
}
public B(int param, String s){
this.param=param;
this.s=s;
}
public void setParam(int param) {
this.param = param;
}
public void setS(String s) {
this.s = s;
}
@Override
public Object clone() throws CloneNotSupportedException {
A t= (A) super.clone();
return t;
}
}
public static void main(String[] args) throws CloneNotSupportedException {
//对多个A类的clone创建
A a= new A(12,"123");
for(i=0;i<6;i++){//数量限制
A cloneA =(A) a.clone();
a.setParam(i);
a.setS(" "+i);
System.out.println(a.getS()+a.getParam());
}
}
实现的过程非常简单,基本就是对clone函数的重载与实现,使用Cloneable接口进行标记辅助,除此之外便没有其他需要注意的了。
小结
主要是对clone方法的重载,一个接口一个方法就是原型模式的全部,在实现上是在内存上直接复制二进制流,效率很高,比new出来的性能要高,但是要注意一下,clone的过程不会调用构造函数,也就是说通过这一方法创造出来的对象不会有构造函数的处理,所以在具体使用时希望大家根据需求灵活进行,特别是在深浅拷贝的选择上一定要仔细考虑。