标签
原型模式是一种创建型设计模式,它通过复制现有对象(原型)来创建新实例,而不是直接通过构造函数来实例化对象。通过实现
clone()
方法,原型模式可以高效地创建对象,尤其适用于构造成本高或结构复杂的对象场景。原型模式的关键点:
- 克隆方法:通常为
clone()
方法,具体原型类通过实现此方法来复制自身。
- 克隆类型:可以选择浅拷贝(仅复制基本数据类型)或深拷贝(复制整个对象,包括引用数据)。
定义
原型模式是一种创建型设计模式,通过复制现有实例来创建新对象,而不是通过实例化构造函数。这样可以在不指定具体类的情况下创建新对象。
结构
原型模式的核心结构如下:
- Prototype 接口:定义一个用于克隆自身的方法。
- 具体原型类(Concrete Prototype):实现
Prototype
接口的类,包含要复制的对象的具体属性和行为。
- 客户端(Client):请求复制一个原型对象来创建新的实例,而不关心具体的实现类。
类图
代码实现
TODO
优缺点
优点
- 提高对象创建效率:对于创建成本高的对象,通过克隆来创建新对象比直接实例化更高效。
- 减少子类数量:通过克隆而不是创建实例,降低了创建过程中的子类数量。
- 简化对象创建逻辑:适用于创建对象结构复杂或构造过程繁琐的情况。
缺点
- 复杂性增加:对于包含深层嵌套引用的数据结构,实现深拷贝较为复杂。
- 不适用深拷贝:若对象包含复杂的依赖,可能会导致克隆失败或异常,尤其是在引用对象没有实现
Cloneable
接口时。
扩展
克隆类型:浅拷贝与深拷贝
- 浅拷贝:复制对象时,仅复制基本数据类型,对于引用类型的数据,浅拷贝仅复制引用地址。因此,原型对象与克隆对象共享同一引用数据。
- 深拷贝:复制对象时,将引用类型的数据也复制一份,使原型对象和克隆对象完全独立。
深拷贝实现
为了实现深拷贝,可以在
clone()
方法中手动复制引用类型,或使用序列化与反序列化来实现深拷贝。使用场景
- 需要频繁创建相似对象:如游戏中的怪物或道具,都是基于相同属性的小差异化对象。
- 对象创建成本较高:例如初始化时间较长或涉及大量计算。
- 实例间属性差异较小:通过克隆一个基础对象并稍作修改生成新实例,如数据分析中的模板报告。