浅克隆的对象和原对象也是两个对象,但是他们的引用属性对象是共享同一个对象的。上面修改公司印章,克隆对象的公司印章也修改了。基本数据类型和基本数据类型的包装类型不共享。
浅克隆模型图
对于浅克隆:栈内存中基本数据类型存储的是值,引用数据类型存储的是引用地址值。浅克隆对所有的基本数据类型进行拷贝,引用数据类型拷贝引用地址值。注意:对于基本数据类型包装类型、String类型,还有基本数据类型,只要对其进行赋值操作,就相当于从新创建了对象,之前的对象或者值就成了不可达状态,只能被垃圾回收器回收了。虽然基本数据类型的包装类型和String都是引用数据类型,但是无法证明他们是共享同一个地址值(希望大神解惑)。
深克隆模型图
对于深克隆:深克隆对所有的数据都进行了拷贝,不论是基本数据类型还是引用数据类型。两个对象之间没有任何关联关系,完完全全是独立自主的,虽然他们长得一样。
总结:所有的程序都是为业务服务的,按照业务需求,如果原型模式获取对象更简单,更合理,那么就应该使用原型模式,如果使用原型模式反而让对象的获取更复杂,程序的复杂度提升,可读性下降。就不应该强行使用设计模式。