1. 写在前面
上一小节中我们学习了 生成器
。其实很简单,就是 一步一步的去组装对象。
就像我们常用的 @Builder
注解一样,该注解就是 生成器 的一个封装实现的方法。
2. 原型
这一小节我们学习一下原型。
所谓 原型(Prototype)
,就是用已经存在的实例原型,来创建新的对象。
// 原型:
String[] original = { "Apple", "Pear", "Banana" };
// 新对象:
String[] copy = Arrays.copyOf(original, original.length);
3. deep copy
原型的模式,其实刚好跟我们之前看过的深拷贝的模式一致。
我们通过 实现 Clonable接口
,重写 clone()
方法,既可以通过 deep copy 实现原型的创建模式。
一般来说我们 clone()
方法会返回 Object
对象,所以要强制转型一下。
更一般的 ,我们直接定义一个 copy()
方法,返回对应的类型
其实 clone() 方法也可以指定返回类型
public class Student {
private int id;
private String name;
private int score;
public Student copy() {
Student std = new Student();
std.id = this.id;
std.name = this.name;
std.score = this.score;
return std;
}
}