浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的其它对象的引用都仍然指向原来的对象。
//工作经历类
public 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;
}
}
//简历类
public class Resume implements Cloneable
{
private String name;
private String sex;
private String age;
private WorkExperience work = new WorkExperience();
public Resume(String name)
{
this.name = name;
}
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 Resume clone() throws CloneNotSupportedException
{
return (Resume) 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 = a.clone();
b.setWorkExperience("1998-2006", "YY企业");
Resume c = a.clone();
c.setWorkExperience("1998-2003", "ZZ企业");
a.display();
b.display();
c.display();
}
}
结果显示:
大鸟 男 29
工作经历:1998-2003 ZZ企业
大鸟 男 29
工作经历:1998-2003 ZZ企业
大鸟 男 29
工作经历:1998-2003 ZZ企业
深复制:把所有引用对象的变量指向复制过的新对象,而不是原有的被引用对象。
//工作经历
public 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 WorkExperience clone()
{
try
{
return (WorkExperience) super.clone();
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return null;
}
}
//简历类
public class Resume implements Cloneable
{
private String name;
private String sex;
private String age;
private WorkExperience work = new WorkExperience();
public Resume(String name)
{
this.name = name;
}
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 Resume clone()
{
Resume obj = new Resume(name);
obj.sex = this.sex;
obj.age = this.age;
obj.work = work.clone();
return obj;
}
}
//客户端代码保持不变
public class Main
{
public static void main(String[] args)
{
Resume a = new Resume("大鸟");
a.setPersonalInfo("男", "29");
a.setWorkExperience("1998-2000", "XX公司");
Resume b = a.clone();
b.setWorkExperience("1998-2006", "YY企业");
Resume c = a.clone();
c.setWorkExperience("1998-2003", "ZZ企业");
a.display();
b.display();
c.display();
}
}
结果显示为:
大鸟 男 29
工作经历:1998-2000 XX公司
大鸟 男 29
工作经历:1998-2006 YY企业
大鸟 男 29
工作经历:1998-2003 ZZ企业
一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。
分享到:
相关推荐
Android之大话设计模式——:抽象工厂模式借鉴.pdf
Android之大话设计模式——:抽象工厂模式参考.pdf
大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf
设计模式之《大话设计模式》.pptx
设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为...
《大话设计模式》C++实现-design-patterns-cpp
大话设计模式 完整设计模式介绍
读书笔记:大话设计模式C++
android之大话设计模式.pdf
《大话设计模式》对各种设计模式,做简要归纳(原创)
树懒自己整理的大话设计模式的修行笔记,对程序设计有很大的帮助,主要是以自己学习的习惯整理的!
android之大话设计模式整理.pdf
读书笔记:设计模式大话设计模式
大话设计模式之外观模式 经典代码 C#类
单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...
大话设计模式源代码之简单工厂模式 经典代码
6. 原型模式:原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 7. 模板方法模式:当我们要完成在某一个细节次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们...
读书笔记:设计模式学习《大话设计模式》
NULL 博文链接:https://helei050.iteye.com/blog/2086309
以上只是设计模式中的一部分,"大话模式源代码示例"涵盖的28个实例将覆盖更多的模式,如命令模式、职责链模式、状态模式、访问者模式等。通过这些源代码,我们可以深入理解每个模式的工作原理,学习如何在实际项目中...