原型模式
注意:被拷贝的类需要实现Cloneable接口,其主要作用标志着是一个可拷贝的对象;并不一定要实现此接口,还可以通过流来实现拷贝。其核心通过clone进行拷贝
业务代码
客户端调用
结果
上面代码实现了原型模式的拷贝
原型模式分为深克隆与浅克隆
- 浅克隆
客户端调用
- 类属性存在引用类型的时候,拷贝的还是原来的对象值,也就是说拷贝得是内存地址,上面代码后一个引用类型的值覆盖前一个值。这就是浅拷贝
深拷贝
- 代码差不多,只不过是把引用类型再次做了一次拷贝,同样引用类实现cloneable接口
原型模式的使用场景
- 如果类的初始化需要耗费较多的资源,那么可以通过原型拷贝避免这些消耗
- 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式
优缺点
优点:拷贝是通过二进制流来实现的,比new 对象性能好,尤其是创建较多的对象时
缺点:拷贝不会调用构造方法,这打破了一道安防屏障。有利有弊。