应用场景
原型模式,英文名Prototype Pattern
该模式通过内存拷贝的方式,快速复制出一个新对象,而不是通过构造方法重新去构建
使用情景主要有以下几种
- 性能要求高,对象创建频繁,通过内存拷贝的方式可以大幅提升性能
- 对象构建过程很复杂,不如直接拷贝生成,然后再修改个别字段
- 新对象的初始值,完全继承自上个对象,可以直接拷贝,没必要再建一个空对象逐个赋值
实现代码
在Java中,内存拷贝主要是通过clone函数来实现的
这是一个native方法,必须实现Cloneable接口后才可使用
通过clone函数创建的对象,不会调用构造方法
//不使用public权限,这样只有通过Factory才能创建
class Product implements Cloneable {
@Override
@SneakyThrows
public Product clone() {
return (Product) super.clone();
}
}
public class Factory {
private static final Product product = new Product();
//通过内存拷贝的方式创建新对象
synchronized public static Product createProduct() {
return product.clone();
}
}
深拷贝和浅拷贝
我们以上的Product是一个比较简单的类
对于复杂的类来说,一个类中可能还包含其它类的实例对象
浅拷贝是指只拷贝最外层对象,成员对象直接引用原地址
深拷贝是指成员对象也进行内存拷贝,而成员对象本身可以也有自己的成员变量,所以需要递归进行内存拷贝
Java的clone函数是浅拷贝的,深拷贝需要自己去实现