您的位置:首页 > 编程语言 > Java开发

java设计模式——原型模式

2013-02-17 23:01 561 查看
《大话设计模式》第九章

package ch09;

public class WorkExperience implements Cloneable {
private String workDate = null;
private String company = null;

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 {
WorkExperience workExperience = (WorkExperience)super.clone();
workExperience.company = new String(this.company);
workExperience.workDate = new String(this.workDate);
return workExperience;
}

}


package ch09;

public class Resume implements Cloneable {
private String name = null;
private String sex = null;
private int age = 0;
private WorkExperience workExperience = null;

public Resume(String name) {
this.name = name;
this.workExperience = new WorkExperience();
}

public Resume(WorkExperience workExperience) throws CloneNotSupportedException {
this.workExperience = (WorkExperience)workExperience.clone();
}

public void setPersonalInfo(String sex, int age) {
this.age = age;
this.sex = sex;
}

public void setWorkExperience(String workDate, String company) {
this.workExperience.setWorkDate(workDate);
this.workExperience.setCompany(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.age = this.age;
resume.name = this.name;
resume.sex = this.sex;
return resume;
}
}


package ch09;

import java.text.SimpleDateFormat;

public class Client {
SimpleDateFormat sdf = new SimpleDateFormat();

/**
* @param args
* @throws CloneNotSupportedException
*/
public static void main(String[] args) throws CloneNotSupportedException {
Resume a = new Resume("大鸟");
a.setPersonalInfo("男", 29);
a.setWorkExperience("1998-2000", "X公司");

Resume b = (Resume)a.clone();
b.setWorkExperience("1998-2006", "Y公司");

Resume c = (Resume)a.clone();
c.setWorkExperience("1998-2003", "Z公司");

a.display();
b.display();
c.display();
}

}


原型模式,从字面意思来理解,不是很好理解,反正对我来说是这样的。原型模式其实就是克隆,必须实现Cloneable接口,然后要重写protected Object clone() throws CloneNotSupportedException这个方法。clone还分为浅复制和深复制。我的代码里的是深复制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: