package com.prototype;
/**
*
* @Filefile : Resume.java
* @version : 1.0
* @Author : sky
* @Date : 2012-7-3
* ================================
* @Package : com.prototype
* @Class :
* @extend
* 被克隆的类必须自己实现Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。Cloneable 接口实际上是个标识接口,没有任何接口方法。
2、实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。
3、在Java.lang.Object类中克隆方法是这么定义的:
protected Object clone()throws CloneNotSupportedException
创建并返回此对象的一个副本。表明是一个受保护的方法,同一个包中可见。
按照惯例,返回的对象应该通过调用 super.clone 获得。
*
*================================
*Copyright (c) 2012 Colavia
*/
public class Resume implements Cloneable {
private String name;
private String sex;
private String age;
private WorkExperience workExperience;
public Resume (String name){
this.name = name;
workExperience = new WorkExperience();
}
public void setPersoinInfo(String sex, String age) {
this.sex = sex;
this.age = age;
}
public void setWorkExperience(String timeArea, String company) {
workExperience.timeArea = timeArea;
workExperience.company = company;
}
public void display() {
System.out.println("姓名:"+this.name +" 性别:"+this.sex +" 年龄:"+this.age);
System.out.println("工作时间:"+workExperience.timeArea +" 公司:"+workExperience.company);
}
/**
* 克隆操作
* 返回自身对象的一个副本
*/
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
package com.prototype;
public class WorkExperience {
public String timeArea;
public String company;
}
package com.prototype;
/**
* java 的
JAVA中浅复制与深复制 参考:
http://coolmist.iteye.com/blog/127455
原型模式 :用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
* @Filefile : MainRun.java
* @version : 1.0
* @Author : sky
* @Date : 2012-7-3
* ================================
* @Package : com.prototype
* @Class :
* @extend
*
*
*================================
*Copyright (c) 2012 Colavia
*/
public class MainRun {
/**
* @param args
*/
public static void main(String[] args) {
Resume resume1 = new Resume("大鸟");
resume1.setPersoinInfo("男", "28");
resume1.setWorkExperience("2012/5/12 - 2013/08/27", "baidu");
resume1.display();
System.out.println("--------------------------");
Resume resume2 = null;
try {
resume2 = (Resume)resume1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
resume2.setWorkExperience("47/5/12 - 13/08/27", "google");
resume2.display();
}
}