1. 定义
用原型实例对象指定创建对象的种类,并通过拷贝这些原型创建新的对象。—— 摘自《研磨设计模式》陈臣、王斌
原型模式,英文名Prototype,在java里原型模式是比较简单的,java里的浅复制和深复制都是原型模式的应用,浅复制和深复制也叫浅克隆和深克隆。
2. java里的复制方法
Java的所有类都是从java.lang.Object类继承而来的,而Object类提供protected Object clone()方法对对象进行复制。Java语言提供的Cloneable接口只起一个作用,就是在运行时期通知Java虚拟机可以安全地在这个类上使用clone()方法。通过调用这个clone()方法可以得到一个对象的复制。由于Object类本身并不实现Cloneable接口,因此如果所考虑的类没有实现Cloneable接口时,调用clone()方法会抛出CloneNotSupportedException异常。
关于浅复制和深复制的区别,在我本人的另一篇博文里说过了,并且用代码举了例子,地址:http://blog.csdn.net/onezg/article/details/52891938
3. 原型模式代码举例
public class Student implements Cloneable {
private int studentNumber; //学号
private String name; //姓名
//这里省略了构造方法和setters/getters
//这里一定要public修饰,不要沿用Cloneable接口的protected
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public static void main(String[] args) throws CloneNotSupportedException {
Student s1 = new Student(1, "onezg");
Student s2 = (Student)s1.clone();
s2.setName("alexander");
System.out.println(s1.getName());
}
输出结果:onezg
原因:复制后s1和s2是两个对象
现在再回头看原型横式的定义就很透彻了,说直白点,原型模式就是以一个对象为原型,通过拷贝这个原型复制新的对象。