java设计模式创建篇------原型模式

开篇

对于Cloneable接口不了解的可以参照Java技巧——Cloneable接口与clone方法,我们主要围绕这一接口来聊一聊原型模式。

核心思想

使用原型实例来确定对象的种类,使用clone方法实现对于这些原型的拷贝,产生新的对象。不通过new来产生对象而是通过clone方法复制对象的的模式为原型模式。

简单实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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的过程不会调用构造函数,也就是说通过这一方法创造出来的对象不会有构造函数的处理,所以在具体使用时希望大家根据需求灵活进行,特别是在深浅拷贝的选择上一定要仔细考虑。