一、定义
原型模式就是制定创建对象的种类,并且拷贝这些原型创建新的对象。
二、框架运用
Object
类中的 clone
接口
三、实战
1、子类
public class WorkExperience implements Cloneable {
private String workDate;
private String company;
public WorkExperience(String workDate, String company) {
this.workDate = workDate;
this.company = 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;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
2、实现类
public class Resume implements Cloneable {
private String name;
private String sex;
private String age;
private WorkExperience workExperience;
public Resume(String name) {
this.name = name;
}
public Resume(WorkExperience workExperience) {
this.workExperience = workExperience;
}
public void setAge(String sex, String age) {
this.sex = sex;
this.age = age;
}
public void setWorkExperience(String workDate,String company){
workExperience = new WorkExperience(workDate,company);
}
public void display(){
System.out.println(name+" " +sex+" " +age);
System.out.println(workExperience.getWorkDate()+" "+workExperience.getCompany());
}
@Override
protected Object clone() throws CloneNotSupportedException {
Resume resume = new Resume(this.workExperience);
resume.name = this.name;
resume.age = this.age;
resume.sex = this.sex;
return resume;
}
}
3、执行类
public class Client {
public static void main(String[] args) throws CloneNotSupportedException {
Resume a = new Resume("韩信");
a.setAge("男","12");
a.setWorkExperience("1988-2009","阿拉巴巴");
Resume b = (Resume) a.clone();
b.setWorkExperience("1999-8009","京东商城");
Resume c = (Resume) a.clone();
c.setWorkExperience("1945-9099","五把统称");
a.display();
b.display();
c.display();
}
}
4、结果
Connected to the target VM, address: '127.0.0.1:62652', transport: 'socket'
韩信 男 12
1988-2009 阿拉巴巴
韩信 男 12
1999-8009 京东商城
韩信 男 12
1945-9099 五把统称
Disconnected from the target VM, address: '127.0.0.1:62652', transport: 'socket'