简历复印——原型模式
原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式(Prototype)结构图
//简历类
public class Resume implements Cloneable {
private String name;
private String sex;
private String age;
private WorkExperience work;
public Resume(String name) {
this.name = name;
work = new WorkExperience();
}
public Resume(WorkExperience work) {
this.work = (WorkExperience) work.clone();
}
//设置个人信息
public void SetPersonalInfo(String sex, String age) {
this.sex = sex;
this.age = age;
}
//设置工作经历
public void SetWorkExperience(String workDate, String company) {
work.setWorkDate(workDate);
work.setCompany(company);
}
//显示
public void Display() {
System.out.println(name + " " + sex + " " + age + " ");
System.out.println("工作经历:" + work.getWorkDate() + " " + work.getCompany());
}
public Resume Clone() {
Resume obj = new Resume(this.work);
obj.name = this.name;
obj.sex = this.sex;
obj.age = this.age;
return obj;
}
}
//工作经历类
public class WorkExperience implements Cloneable {
private String workDate;
private String company;
public String getWorkDate() {
return workDate;
}
public void setWorkDate(String workDate) {
this.workDate = workDate;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public WorkExperience clone() {
try {
return (WorkExperience) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
}
//Main类
public class Main {
public static void main(String args[]) {
Resume a = new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "XX公司");
Resume b = a.Clone();
b.SetWorkExperience("1998-2006", "YY企业");
Resume c = a.Clone();
c.SetWorkExperience("1998-2003", "ZZ企业");
a.Display();
b.Display();
c.Display();
}
}
原型模式: 用原型实例指定创建对象的种类 ,并且通过拷贝这些原型创建新的对象 。
原型模式其实就是从一个对象再创建另外一个可定制的对象 ,而且不需知道任何创建的细节 ,实现Cloneable这个接口就可以完成原型模式。一般在初始化的信息不发生变化的情况下 ,克隆是最好的办法 。既隐藏了对象创建的细节 ,又对性能是大大的提高 。它等于是不用重新初始化对象,而是动态地获得对象运行时状态。
缺点:原型模式无法和单例模式组合使用, 使用原型模式时不能有final对象,浅复制。