原型模式属于创建型模式,适用于对象的创建过程比较复杂或者需要循环创建大量复杂对象的情况。包括【浅克隆】和【深克隆】两种概念。
由于原型模式可以直接复制内存地址,所以比new或构造方法创建对象更高效。
1 浅克隆
浅克隆是指创建的目标对象拷贝原型对象的程度相对较浅。主要体现在其只实际拷贝了基本数据类型、String 以及 引用对象的引用地址,并没有拷贝引用对象的地址值数据。
/**
* 浅拷贝
* Object实现了Cloneable,可以通过clone方法实现浅拷贝
*/
public class ShallowPrototype implements Cloneable {
private Integer a;
private String b;
private List<String> c;
@Override
public ShallowPrototype clone() {
// 这个操作对“List<String> c”只拷贝了它的引用地址,没有拷贝实际的地址值数据。
return (ShallowPrototype)super.clone();
}
}
2 深克隆
深拷贝相对浅拷贝的概念而言,增加了引用地址值数据的拷贝,其拷贝的动作更彻底。
/**
* 深拷贝
* 通过写读内存实现对象的深拷贝
*/
public class DeepPrototype implements Serializable {
private Integer a;
private String b;
private List<String> c;
public DeepPrototype deepClone() {
// 写内存
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writerObject(this);
// 读内存
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (DeepPrototype)ois.readObject(ois);
}
}
本文详细介绍了原型模式在对象创建过程中的应用,包括浅克隆和深克隆。浅克隆仅拷贝基本类型和引用对象的地址,而深克隆则进一步拷贝引用对象的值数据。示例代码展示了如何实现这两种克隆方式,浅克隆通过`clone()`方法,深克隆利用序列化和反序列化完成。
745

被折叠的 条评论
为什么被折叠?



