指定创建对象的种类,并且通过拷贝原型创建新的对象
适用场景
- 需要一个类的大量对象,因为原生的clone是调用的native方法,不会走构造函数,二进制复制,比new性能好很多
- 创建一个对象,比较繁琐(执行步骤多)、消耗资源多(需要其他资源配合)时适用原型模式
- 当需要一个对象的大量公共信息,而只对少量字段进行差异化时
浅克隆
类图
标准原型.png
简略代码
protected native Object clone() throws CloneNotSupportedException;
public class ConcreteProperty implements Cloneable {
@Override
public ConcreteProperty clone() {
try {
return (ConcreteProperty) super.clone();
} catch (CloneNotSupportedException e) {
//e.printStackTrace();
return null;
}
}
}
public class Client {
public static void main(String[] args) {
ConcreteProperty a = new ConcreteProperty();
ConcreteProperty b = a.clone();
}
}
这就是一个标准的原型模式写法了,我们需要
- 一个clone的接口
- 实现clone方法的具体产品
- 调用原型产生克隆对象的客户端
需要注意的是
- 浅克隆的克隆对象里如果有引用对象,修改一个克隆对象 引用对象的值,所有的克隆对象和原型都会改变,这是因为浅克隆复制了引用对象的地址
深克隆
深克隆一般有两种方式
- 继承Serializable,在clone方法里通过序列化反序列化达到克隆目的
- JSON序列化和反序列化
网友评论