目录
1.特点
实在原有对象的基础上进行复制操作。
克隆的实现都需要继承Cloneable,重写clone方法。
克隆还分为深克隆和浅克隆两种类型。
2.模型与结构
2.1.模型
原型模式包含如下角色:
抽象原型类:规定了具体原型对象必须实现接口
具体访问类:实现抽象原型类的clone()方法,它是可被复制的对象
访问类:使用具体原型中的clone()方法来复制新对象
2.2.结构图
3.实现
3.1.深克隆
//进行对象的克隆的前提是创建对象时要实现序列化接口
@Override
protected Object clone() throws CloneNotSupportedException {
Leaflet leaflet =(Leaflet) super.clone();
//实现深克隆,把引用对象,数组,容器等都克隆一遍
leaflet.createTime = (Date)this.createTime.clone();
return leaflet;
}
3.2.浅克隆
//只需要实现Cloneable接口,重写Object的clone方法就可以克隆了
//浅克隆
@Override protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
4.应用场景
对象之间相同或相似,即只有个别属性不同的时候。
创建对象成本比较大,例如初始化时间过长,占CPU太多,或者占用网络资源太多等,需要优化资源。
创建一个对象需要繁琐的数据准备或访问权限,需要提高性能与安全性
系统中大量使用该类对象,且各个调用者都需要给他属性重新赋值。