原型模式是指用原型实例指定创建对象的类型,并且通过拷贝这些原型创建新的对象。这实际上非常简单,就是对一个实体类实现一个“复制”方法,创建同类对象时直接复制。
这时我们可能有疑问了,原型模式中我们为什么要复制对象,而不是重新new
一个?实际上某些情况下是有这样的适用场景的,比如创建对象是一个耗时操作,或者我们需要复制一个对象当前的运行时状态。
Java提供了对象的浅拷贝方法clone()
,实体类需要实现Cloneable
接口,并实现clone()
方法。
这里要注意浅拷贝和深拷贝的问题:
下面例子我们使用Java实现一个原型模式。
Student.java
public class Student implements Cloneable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Main.java
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Student s = new Student();
s.setName("Tom");
Student s2 = (Student) s.clone();
System.out.println(s2.getName());
}
}