1. 寫在前面
上一小節(jié)中我們學(xué)習(xí)了 生成器
燕酷。其實(shí)很簡單着降,就是 一步一步的去組裝對(duì)象侦讨。
就像我們常用的 @Builder
注解一樣窘面,該注解就是 生成器 的一個(gè)封裝實(shí)現(xiàn)的方法棠绘。
2. 原型
這一小節(jié)我們學(xué)習(xí)一下原型件相。
所謂 原型(Prototype)
,就是用已經(jīng)存在的實(shí)例原型弄唧,來創(chuàng)建新的對(duì)象适肠。
// 原型:
String[] original = { "Apple", "Pear", "Banana" };
// 新對(duì)象:
String[] copy = Arrays.copyOf(original, original.length);
3. deep copy
原型的模式,其實(shí)剛好跟我們之前看過的深拷貝的模式一致候引。
我們通過 實(shí)現(xiàn) Clonable接口
侯养,重寫 clone()
方法,既可以通過 deep copy 實(shí)現(xiàn)原型的創(chuàng)建模式澄干。
一般來說我們 clone()
方法會(huì)返回 Object
對(duì)象逛揩,所以要強(qiáng)制轉(zhuǎn)型一下。
更一般的 麸俘,我們直接定義一個(gè) copy()
方法辩稽,返回對(duì)應(yīng)的類型
其實(shí) 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;
}
}