是什么
原型模式属于创建型,存在的意义是避免对象的创销,保护原型。原封不动的克隆出一个对象,被克隆的实例就是原型。用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
哪里使用
- 通过原型拷贝避免对象创销。
- 通过new 产生一个对象需要非常频繁的数据准备或访问权限
- 一个对象需要提供给其他对象访问,而且调用者可能修改其值,这个时候用原型模式拷贝对象给调用者使用,不会影响原来对象的值,即保护性拷贝。这种情况使用最多。
⚠️:通过实现Cloneable接口调用clone方法并不一定比new对象快,前提是new构造对象较为耗时或者成本较高,才会体现出clone效率的上升。原型模式的实现并非只有实现Cloneable接口这一种方式。
Cloneable
Cloneable是一个接口需要实现clone方法,但clone拷贝对象时候不会执行构造方法。
深拷贝/浅拷贝
在使用原型模式时优先考虑使用深拷贝,避免操作副本时影响原始对象的问题。
深拷贝:在拷贝对象时候,对于引用类型的字段也要采用拷贝的方式,基本类型的不用拷贝。
浅拷贝:单纯的引用对象,副本的改变影响原始对象,因为使用的是同一个内存地址。
Coding
保护性拷贝
public class User {}
优点
缺点
直接在内存中拷贝,构造函数不会执行
