1.产生背景
- 为什么需要原型模式
与其它创建型模式不同,原型模式不是在他们的基础上的改进;
2.概念
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
本质: 通过一个原始对象为模版,克隆出更多一模一样的对象;
在java中就是clone方法;
3.目的
提高效率、绕过构造方法、使用方便
4.解决方案
本质:类自身内实现clone方法;先创建一个对象,然后以这个对象为模版,通过这个对象内的clone方法,复制出大量一模一样的对象;
5. 类图
6.优缺点
优点:
- 高性能
通过new进行创建对象时,需要首先获取class信息,计算出所需内存大小,分配内存,赋默认值,执行代码块、执行构造方法初始化 等一系列动作;
而使用clone方法,只需要根据原始对象大小分配内存,然后复制二进制流即可;省去了很多的计算和初始动作;因此性能会较高;
- 绕过构造方法
这个即是优点,某些情况下可能也是缺点;
如果一个对象的初始化非常消耗性能,比如:通过加载数据库配置,则绕过构造方法会大大提高性能;
- 使用简单
这也是创建型模式的基本优点,它隐藏了对象创建的内部细节;
最核心的目的:高性能、方便、快速的创建出大量一模一样的对象
缺点:
- 绕过构造方法
一些必须通过构造方法进行不同初始化的操作将无法执行;
7.应用场景
- 重复创建相似对象,对象的配置基本不变
- 对象的构造方法非常消耗资料
8.现实案例
jdk 中的cloneable接口;
9. 注意事项
java中的clone方法,有两种式:深拷贝和浅拷贝;
深拷贝:是指复制的两个对象本身及对象的属性(包括所有递归属性)都是完全全新的对象;在内存是,是两块不同的内存块;
浅拷贝:是指复制的两个对象本身是不同的,但是属性值引用的是同一个对象;即拷贝的是同一个同象的引用;