定义
用一个已经创建的实例作为原型,通过复制该对象来创建一个与原型相同或相似的新对象。
UML图
原型模式的实现
深拷贝和浅拷贝
1.浅拷贝
直接使用Object的clone()方法,这种拷贝方法引用类型的复制是直接将地址引用复制给新的对象,
相当于原型和新的对象共享这个引用类型。
public class Sex implements Cloneable{
private String type;
public Sex() {
super();
}
public Sex(String type) {
super();
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Sex [type=" + type + "]";
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
2.深拷贝
public class Person implements Cloneable{
private String name;
private int age;
private Sex sex;
public Person() {
super();
}
public Person(String name, int age, Sex sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
@Override
protected Object clone() throws CloneNotSupportedException {
Person newPerson = (Person) super.clone();
newPerson.setSex((Sex) (newPerson.getSex().clone()));
return newPerson;
}
}