浅度克隆
package com.imust.prototype;
import java.util.Date;
/**
* 克隆实现这个接口
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月6日
* @project shejimoshi
* @package com.imust.prototype
*/
public class Sheep implements Cloneable{
private String sname;
private Date birthday;
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj = super.clone();//直接调用Object的克隆方法
return obj;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Sheep() {
super();
}
public Sheep(String sname, Date birthday) {
super();
this.sname = sname;
this.birthday = birthday;
}
}
测试1
package com.imust.prototype;
import java.util.Date;
/**
* 测试原型模式(浅克隆)
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月6日
* @project shejimoshi
* @package com.imust.prototype
*/
public class Client {
public static void main(String[] args) throws Exception {
Date date = new Date();
date.setTime(2323232323L);
Sheep s1 = new Sheep("少利",date);
System.out.println(s1);
System.out.println(s1.getSname());
System.out.println(s1.getBirthday());
Sheep s2 = (Sheep) s1.clone();
System.out.println(s2);
System.out.println(s2.getSname());
}
}
深度克隆
package com.imust.prototype;
import java.util.Date;
/**
* 深度克隆
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月6日
* @project shejimoshi
* @package com.imust.prototype
*/
public class Sheep2 implements Cloneable{
private String sname;
private Date birthday;
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj = super.clone();//直接调用Object的克隆方法
//添加如下代码实现深复制(deep Clone)
Sheep2 s = (Sheep2) obj;
s.birthday = (Date) this.birthday.clone();
return obj;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Sheep2() {
super();
}
public Sheep2(String sname, Date birthday) {
super();
this.sname = sname;
this.birthday = birthday;
}
}
测试2
package com.imust.prototype;
import java.util.Date;
/**
* 测试原型模式
* 测试深复制
* @author Zachary (为上帝所心仪的人)
* @date 2017年9月6日
* @project shejimoshi
* @package com.imust.prototype
*/
public class Client2 {
public static void main(String[] args) throws Exception {
Sheep2 s1 = new Sheep2("少利",new Date());
Sheep2 s2 = (Sheep2) s1.clone();
System.out.println(s1);
System.out.println(s1.getSname());
System.out.println(s1.getBirthday());
Date date = new Date();
date.setTime(23232323232L);
s1.setBirthday(date);
System.out.println(s1.getBirthday());
s2.setSname("多里");
System.out.println(s2);
System.out.println(s2.getSname());
System.out.println(s2.getBirthday());
}
}