一、简历代码初步实现
package operation;
class Resume{
private String name;
private String sex;
private String age;
private String timeArea;
private String company;
public Resume(String name) {
this.name=name;
}
public void SetPersonalInfo(String sex,String age) {
this.sex=sex;
this.age=age;
}
public void SetWorkExperience(String timeArea,String company) {
this.timeArea=timeArea;
this.company=company;
}
public void Display() {
System.out.println(name+" "+sex+" "+age);
System.out.println("工作经历:"+timeArea+" "+company);
}
}
public class Main{
public static void main(String[] args) {
Resume a=new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "XX公司");
Resume b=new Resume("大鸟");
b.SetPersonalInfo("男", "29");
b.SetWorkExperience("1998-2000", "XX公司");
Resume c=new Resume("大鸟");
c.SetPersonalInfo("男", "29");
c.SetWorkExperience("1998-2000", "XX公司");
a.Display();
b.Display();
c.Display();
}
}
这样写的话三份简历需要三次实例化。
可以这样写:
public class Main{
public static void main(String[] args) {
Resume a=new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "XX公司");
Resume b=a;
Resume c=a;
a.Display();
b.Display();
c.Display();
}
}
这其实是传引用,不是传值,这样就如同在b纸张和c纸张上写着简历在a处一样。
二、原型模式
package operation;
class Resume implements Cloneable {
private String name;
private String sex;
private String age;
private String timeArea;
private String company;
public Resume(String name)
{
this.name = name;
}
public void SetPersonalInfo(String sex, String age)
{
this.sex = sex;
this.age = age;
}
public void SetWorkExperience(String timeArea, String company)
{
this.timeArea = timeArea;
this.company = company;
}
public void Display()
{
System.out.println(name+" "+sex+" "+age);
System.out.println(timeArea+" "+company);
}
public Object Clone() throws CloneNotSupportedException
{
return (Object)super.clone();
}
}
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Resume a = new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "XX公司");
Resume b = (Resume)a.Clone();
b.SetWorkExperience("1998-2006", "YY企业");
Resume c = (Resume)a.Clone();
c.SetPersonalInfo("男", "24");
a.Display();
b.Display();
c.Display();
}
}
三、浅复制与深复制
package operation;
class WorkExperience {
private String workDate;
private String 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;
}
}
class Resume implements Cloneable {
private String name;
private String sex;
private String age;
private WorkExperience work;
public Resume(String name)
{
this.name = name;
work = new WorkExperience();
}
public void SetPersonalInfo(String sex, String age)
{
this.sex = sex;
this.age = age;
}
public void SetWorkExperience(String workDate, String company)
{
work.setWorkDate(workDate);
work.setCompany(company);
}
public void Display()
{
System.out.println(name+" "+sex+" "+age);
System.out.println(work.getWorkDate()+" "+work.getCompany());
}
public Object Clone() throws CloneNotSupportedException
{
return (Object)super.clone();
}
}
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Resume a = new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "XX公司");
Resume b = (Resume)a.Clone();
b.SetWorkExperience("1998-2006", "YY企业");
Resume c = (Resume)a.Clone();
c.SetPersonalInfo("男", "24");
c.SetWorkExperience("1998-2003", "ZZ企业");
a.Display();
b.Display();
c.Display();
}
}
浅复制就是被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
但我们可能有这样一种需求,把要复制的对象所引用的对象都复制一遍。深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
package operation;
class WorkExperience implements Cloneable {
private String workDate;
private String 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;
}
public Object Clone() throws CloneNotSupportedException
{
return (Object)super.clone();
}
}
class Resume implements 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) throws CloneNotSupportedException
{
this.work = (WorkExperience)work.Clone();
}
public void SetPersonalInfo(String sex, String age)
{
this.sex = sex;
this.age = age;
}
public void SetWorkExperience(String workDate, String company)
{
work.setWorkDate(workDate);
work.setCompany(company);
}
public void Display()
{
System.out.println(name+" "+sex+" "+age);
System.out.println(work.getWorkDate()+" "+work.getCompany());
}
public Object Clone() throws CloneNotSupportedException
{
Resume obj = new Resume(this.work);
obj.name = this.name;
obj.sex = this.sex;
obj.age = this.age;
return obj;
}
}
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Resume a = new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "XX公司");
Resume b = (Resume)a.Clone();
b.SetWorkExperience("1998-2006", "YY企业");
Resume c = (Resume)a.Clone();
c.SetPersonalInfo("男", "24");
c.SetWorkExperience("1998-2003", "ZZ企业");
a.Display();
b.Display();
c.Display();
}
}