是什么?——一种克隆对象的方法。
使用场景?——1、依赖与外部资源或硬件密集型操作进行新对象的创建的情况
2、获取相同对象在相同状态的拷贝而无须进行重复获取状态操作的情况
3、在不确定所属具体类时需要对象的实例的情况
优点?——1、性能提高。
2、逃避构造函数的约束。
缺点?——1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。
2、必须实现 Cloneable 接口。
怎么用?——
原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:
1、实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。
2、重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。
public class Sheep implements Cloneable{
private String name;
private Date birthday;
@Override
public Object clone() throws CloneNotSupportedException {
Object obj=super.clone();//直接调用Object对象的clone方法
return obj;
}
public Sheep(String name, Date birthday) {
this.name = name;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
深克隆与浅克隆:https://blog.csdn.net/zhangjg_blog/article/details/18369201