现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。
现采用原型模式(Prototype)来实现上述要求,得到如图6-1所示的类图。
图6-1类图
【Java代码】
public class WorkExperience(1)Cloneable{//工作经历
private String workDate;
private String company;
public Object clone( ){
(2);
Obj.workDate=this.workDate;
Obj.company=this.company;
return Obj;
}
//其余代码省略
}
public class Resume(3)Cloneable{//简历
private String name;
private String sex;
private String age;
private WorkExperience work;
public Resume(string name){
this.name=name;
work=new WorkExperience( );
}
private Resume(WorkExperience work){
this.work=(4);
}
public void?SetPersonInfo(string sex,string age){/*实现省略*/}
public void?SetWorkExperience(string workDate,string company){/*实现省略*/}
public Object clone( ){
Resume Obj=(5);
return Obj;
}
}
Class WorkResume{
public static void?main( ){
Resume?a=new Resume(“张三”);
a.SetPersonInfo(“男”,“29”);
a.SetWorkExperience(“1998-2000”,“XXX公司”);
Resume?b=(6);
b.SetWorkExperience(“2001-2006”,“YYY公司”);
}
}
正确答案及解析
正确答案
解析
(1)implements
(2)WorkExperience obj=new Workexperience()
(3)implements
(4)(WorkExperience)work.Clone()
(5)new Resume(this.work)
(6)(Resume)a.Clone()
本题考查原型模型的概念及应用。
原型模型的主要思想:先借用已有系统作为原型模型,通过“样品”不断改进,使得最后的产品就是用户所需要的。原型模型通过向用户提供原型获取用户的反馈,使开发出的软件能够真正反映用户的需求。同时,原型模型采用逐步求精的方法完善原型,使得原型能够“快速”开发,避免了像瀑布模型一样在冗长的开发过程中难以对用户的反馈作出快速的响应。相对瀑布模型而言,原型模型更符合人们开发软件的习惯,使目前较流行的一种实用软件生存期模型。
所有java类都继承自java.lang.Object,而object类提供一个clone()方法,可以将一个java对象复制一份。因此在java中可以直接使用Object提供的clone()方法来实现对象的克隆。能够实现克隆的java类必须实现一个标识接口Cloneable,表示这个java支持复制。
题中WorkExperience类和Resume类需要实现Cloneable接口,故(1)和(3)为implements,WorkExperience中需要实现Clone()方法,并将自身复制一份,有下面代码可知(2)为WorkExperience obj=new WorkExperience()。Resume类中的私有构造方法实现WorkExperience深复制,故(4)中为(WorkExperience)work.clone(),而Resume类中Clone方法实现自身的复制,故(5)中为new Resume(this.work)。
在main中实现Resume b对a的复制,故(6)中为(Resume)a.Clone()。