原型模式的核心在于以某个对象为模板,创建多个类似对象
Java 代码通过 cloneable 接口实现原型模式,关于 cloneable 我之前单独介绍过,感兴趣的可以搜一下, 这里我只简单提一下原型模式实现:
public class ProtoTypeCitation {
public static void main(String[] args) throws CloneNotSupportedException {
Citation citation1 = new Citation("张三", "被评为三好学生。", "学院");
citation1.display();
Citation citation2 = (Citation) citation1.clone();
citation2.setName("李四");
citation2.display();
}
static class Citation implements Cloneable {
private String name;
private String info;
private String school;
public Citation(String name, String info, String school) {
this.name = name;
this.info = info;
this.school = school;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private void display() {
System.out.println(name + info + school);
}
@Override
protected Object clone() throws CloneNotSupportedException {
System.out.println("克隆成功!");
return super.clone();
}
}
}
执行结果:
张三被评为三好学生。学院
克隆成功!
李四被评为三好学生。学院
这里需要区分深克隆和浅克隆:
- 浅克隆:只克隆基础类型和对应包装类,对象类型只克隆引用
- 深克隆:所有类型属性都克隆
理论上完整意义的深克隆是没法实现的,除非你引用的所有对象类型都实现 cloneable 接口