介绍
Prototype模式 原型模式
创建型模式之一
采取复制原型对象的方法来创建对象的实例
使用Prototype模式创建的实例,具有与原型一样的数据
特点
- 由原型对象自身创建目标对象,也就是说,对象创建这一动作发自原型对象本身
- 目标对象是原型对象的一个克隆。也就是说通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值
- 根据对象克隆深度层次不同,有浅度克隆和深度克隆
- 浅度克隆:对于引用属性,只克隆地址
- 深度克隆:对于引用属性,其引用对象也会被克隆一份
应用场景
- 在创建对象的时候,我们不知希望被创建的对象继承类的基本结构,还希望继承原型对象的数据
- 希望对目标对象的修改不影响既有的原型对象(深度克隆时课完全互不影响)
- 隐藏克隆操作的细节。
结构图
根据介绍可知,原型模式的实现就是在原型类里实现一个clone()方法,当然Java类都继承了Object,都自动有Object的clone()方法,这是一个浅拷贝的方法。
如果需要深度拷贝,可以自行重写clone方法,或者使用其他工具类
代码实现
看Object或具体拷贝方法即可
- 最简单的实现就是属性值一一复制赋值到新对象里
- 浅拷贝就引用只赋值引用地址(浅拷贝时一定要注意引用类型的问题,否则会给其他关联使用目标对象的代码带来你意想不到的错误)
- 深拷贝就是引用属性也new个新的,再把引用属性内部的字段值进行拷贝
- 深度拷贝比浅拷贝更耗时和耗空间