原型模式
00 分钟
2024-11-13
标签
💡
原型模式是一种创建型设计模式,它通过复制现有对象(原型)来创建新实例,而不是直接通过构造函数来实例化对象。通过实现 clone() 方法,原型模式可以高效地创建对象,尤其适用于构造成本高或结构复杂的对象场景。
原型模式的关键点
  • 克隆方法:通常为 clone() 方法,具体原型类通过实现此方法来复制自身。
  • 克隆类型:可以选择浅拷贝(仅复制基本数据类型)或深拷贝(复制整个对象,包括引用数据)。

定义

原型模式是一种创建型设计模式,通过复制现有实例来创建新对象,而不是通过实例化构造函数。这样可以在不指定具体类的情况下创建新对象。

结构

原型模式的核心结构如下:
  • Prototype 接口:定义一个用于克隆自身的方法。
  • 具体原型类(Concrete Prototype):实现 Prototype 接口的类,包含要复制的对象的具体属性和行为。
  • 客户端(Client):请求复制一个原型对象来创建新的实例,而不关心具体的实现类。

类图

notion image

代码实现

TODO

优缺点

优点

  1. 提高对象创建效率:对于创建成本高的对象,通过克隆来创建新对象比直接实例化更高效。
  1. 减少子类数量:通过克隆而不是创建实例,降低了创建过程中的子类数量。
  1. 简化对象创建逻辑:适用于创建对象结构复杂或构造过程繁琐的情况。

缺点

  1. 复杂性增加:对于包含深层嵌套引用的数据结构,实现深拷贝较为复杂。
  1. 不适用深拷贝:若对象包含复杂的依赖,可能会导致克隆失败或异常,尤其是在引用对象没有实现 Cloneable 接口时。

扩展

克隆类型:浅拷贝与深拷贝

  • 浅拷贝:复制对象时,仅复制基本数据类型,对于引用类型的数据,浅拷贝仅复制引用地址。因此,原型对象与克隆对象共享同一引用数据。
  • 深拷贝:复制对象时,将引用类型的数据也复制一份,使原型对象和克隆对象完全独立。

深拷贝实现

为了实现深拷贝,可以在 clone() 方法中手动复制引用类型,或使用序列化与反序列化来实现深拷贝。

使用场景

  1. 需要频繁创建相似对象:如游戏中的怪物或道具,都是基于相同属性的小差异化对象。
  1. 对象创建成本较高:例如初始化时间较长或涉及大量计算。
  1. 实例间属性差异较小:通过克隆一个基础对象并稍作修改生成新实例,如数据分析中的模板报告。
上一篇
很鸡儿扯的报错
下一篇
说明

评论
Loading...