一 简介
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
二 实例代码
-
需求
完成简历的复制。
-
代码实现
简历类:被copy的类,需要实现Cloneable接口
package com.ct.prototype;
public class Resume implements Cloneable {
private String name;
private String age;
private String sex;
private WorkExperience workExperience;
public Resume() {
}
//私有构造方法用于调用WorkExperience中的值,进行深度clone
private Resume(WorkExperience workExperience) {
this.workExperience = (WorkExperience) workExperience.clone();
}
public WorkExperience getWorkExperience() {
return workExperience;
}
public void setWorkExperience(WorkExperience workExperience) {
this.workExperience = workExperience;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Object clone(){
Resume obj = new Resume(this.workExperience);
try {
obj = (Resume) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
public void display() {
System.out.println(this.name + " " + this.sex + " " + this.age);
System.out.println(this.workExperience.getCompanyName() + " " + this.workExperience.getWorkDate() + " " + this.workExperience.getRemark());
}
}
工作经历类:
public class WorkExperience implements Cloneable {
private String workDate;
private String remark;
private String companyName;
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getWorkDate() {
return workDate;
}
public void setWorkDate(String workDate) {
this.workDate = workDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Object clone(){
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}
测试类:
package com.ct.prototype;
public class Test {
public static void main(String[] args) {
Resume resume = new Resume();
resume.setName("chentao");
resume.setAge("23");
resume.setSex("男");
WorkExperience work = new WorkExperience();
work.setCompanyName("阿里巴巴");
work.setWorkDate("2001-2008");
work.setRemark("加班多,工资高");
resume.setWorkExperience(work);
resume.display();
Resume resume1 = (Resume) resume.clone();
resume1.setName("wangwu");
resume1.getWorkExperience().setWorkDate("2008-2018");
resume1.getWorkExperience().setCompanyName("腾讯");
resume1.display();
Resume resume2 = (Resume) resume.clone();
resume2.setAge("24");
resume1.getWorkExperience().setWorkDate("2010-2017");
resume2.getWorkExperience().setCompanyName("京东");
resume2.display();
}
}
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。避免了重新创建对象的资源浪费,也使得赋值变得更加简略。
微信扫一扫
关注该公众号