您的位置:首页 > 其它

原型模式(克隆模式,拷贝模式)

2016-07-06 21:21 405 查看
原型模式目的:当创建一个对象比较麻烦的时候,用原型模式来创建对象,提高效率。

使用:就是实现Cloneable接口和重写Object类中的clone方法(clone是本地方法,也就是c语言的方法,效率高)。

</pre><pre name="code" class="java">public class Paper implements Cloneable {
private int id;
private String name;
private String sex;
private String test1;
private String test2;<pre name="code" class="java"><span style="white-space:pre">	</span>private Date birthday;
//浅复制,只复制对象,如果对象值变化,复制的对象也变化@Overrideprotected Object clone() throws CloneNotSupportedException {Object clone = super.clone();return clone;}}

在客户端调用这个方法即可。

@Override
protected Object clone() throws CloneNotSupportedException {
Object clone = super.clone();
//将克隆的对象属性也进行克隆
Paper paper = (Paper) clone;
paper.birthday=(Date)this.birthday.clone();
return clone;
}
深复制是将属性也同时克隆,这样当改变值时,克隆对象的值不变。(能克隆的是是引用类型)

也可以通过序列化和反序列化来进行深复制,也就是通过I/O流来复制。

Paper p = new Paper();
p.setBirthday(new Date());
ByteArrayOutputStream bao = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bao);
oos.writeObject(p);
byte[] bytes = bao.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
Paper p2 = (Paper)ois.readObject();同样将属性和对象都克隆
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: