原型模式(克隆模式,拷贝模式)
2016-07-06 21:21
405 查看
原型模式目的:当创建一个对象比较麻烦的时候,用原型模式来创建对象,提高效率。
使用:就是实现Cloneable接口和重写Object类中的clone方法(clone是本地方法,也就是c语言的方法,效率高)。
在客户端调用这个方法即可。
@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();同样将属性和对象都克隆
使用:就是实现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();同样将属性和对象都克隆
相关文章推荐
- Top K Frequent Elements
- 802.11协议精读8:再论802.11a/g的发送过程与接收过程
- 国内90%以上的 iOS 开发者,对 APNs 的认识都是错的
- 校外实习-7.6
- 平衡二叉树
- 《锋利的jQuery》笔记(一)
- (1)webservice几个术语
- 字符个数统计
- Hadoop Cluster 安装
- 软件工程复习重点
- 提高项目25.2-数组排序(字符)
- find out the neighbour matrix of a mesh
- 了解的工具汇总
- git 简单使用
- OpenGL 着色器语言概述
- 交叉编译Qt5.5.1 with egl (1)
- C#桌面办公应用-工资管理系统系列六
- Android之MediaRecorder录制音频
- 学习笔记——网络基础(一)
- phpStudy2——PHP脚本访问MySql数据库