介绍
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
使用
public class Prototype {
public static void main(String[] args) throws CloneNotSupportedException {
Student student = new Student();
student.setAge(14);
student.setName("Tom");
Score score = new Score();
score.setScore(123);
student.setScore(score);
Student clone = (Student) student.clone();
//浅拷贝,这里返回true
System.out.println(clone.getScore() == student.getScore());
clone.setName("Cat");
clone.setAge(35);
clone.getScore().setScore(44);
System.out.println(student);
System.out.println(clone);
}
}
class Score implements Cloneable{
private Integer score;
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Score{" +
"score=" + score +
'}';
}
}
class Student implements Cloneable{
private String name;
private Integer age;
private Score score;
public Score getScore() {
return score;
}
public void setScore(Score score) {
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
复制代码
注意
- 实现Cloneable接口,并重写clone方法即可进行拷贝操作
- java默认的拷贝是浅拷贝。