java设计模式——原型模式

来源:互联网 发布:不干胶贴纸打印软件 编辑:程序博客网 时间:2024/05/19 03:19

《大话设计模式》第九章

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;}@Overrideprotected 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());}@Overrideprotected 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还分为浅复制和深复制。我的代码里的是深复制。

原创粉丝点击