背景
原型模式也是一种创建模式,它主要通过复制一个对象来创建一个新的对象。 原型类需要满足两个条件:
- 实现
Cloneable
接口,只有实现了这个接口的类才能被拷贝,否则会抛出CloneNotSupportedException
异常。 - 重写
Object
类中的clone
方法,因为Object
类中的clone
方法是protect
,因此原型类需要重写,将clone
方法改为public
。
示例代码
如下:
public class ProtoType implements Cloneable {
public void show() {
System.out.println("hahaha");
}
@Override
protected ProtoType clone() {
ProtoType protoType = null;
try {
protoType = (ProtoType)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return protoType;
}
}
复制代码
客户端调用
public class Main {
public static void main(String[] args) {
ProtoType protoType = new ProtoType();
ProtoType clone = protoType.clone();
clone.show();
}
}
复制代码
适用场景
protected native Object clone() throws CloneNotSupportedException;
复制代码
Object
类中的clone
方法是一个native方法,直接操作内存中的二进制流,所以在构建复杂大对象的时候,会比new一个对象快。
注意事项
- 使用clone方法不会调用类的构造方法。
Object
中的clone
方法是浅拷贝,如果想要实现深拷贝,需要自己实现。 最简单的深拷贝方式直接序列化,然后反序列化。