原型模式是什么?
一句话:
通过”复制一个已存在的对象” 来创建新对象, 而不是重新 new 一个.
核心思想:
  • 有一个原型对象
  • 想要新对象, 直接克隆(Copy)它
  • 不用重新配置\重新加载资源
在Unity里最典型的应用就是:
子弹\特效\小怪\技能副本 —— 本质就是克隆 Prefab

一 标准原型模式结构

  1. Prototypr(抽象原型): 定义克隆方法
  1. ConcretePrototype(具体原型): 实现克隆
  1. Client(客户端): 使用克隆创新对象

二 Unity 实战例子: 技能\子弹克隆

我们做一个可克隆的技能对象, 包含伤害\特效\冷却等, 直接复制而不是重新构造.
  1. 创建原型接口
定义克隆方法
  1. 具体原型: 技能类
  1. 在Unity中使用克隆
运行结果:

三 Unity 最真实用法: 克隆 GameObject

Unity 里原型模式的原生体现就是:
Instantiate(prefba)
他本质就是原型模式!
我们可以把上面改成真正 Unity 风格的原型模式:
  1. 可克隆的敌人原型
  1. 测试调用
这就是 Unity 开发者天天在用的原型模式.

四 浅拷贝 vs 深拷贝(重点)

浅拷贝(MemberwiseClone)
  • 值类型直接复制
  • 引用类型复制引用(共用同一个对象)
深拷贝
  • 连引用类型的内容也一起复制
  • 适合技能配置\角色数据等
简单的深拷贝实现:

五 原型模式什么时候用?

Unity 高频场景:
  1. 批量生成子弹\特效\怪物(Instantiate 本质就是原型)
  1. 需要大量相似对象, 不想反复初始化
  1. 对象创建成本高(配置复杂\加载慢)
  1. 需要动态复制当前状态(比如复制一个正在施法的角色)

六 一句话总结

原型模式 = 复制一个线程对象来创建新对象, 避免重复构造, Unity 的 Instantiate 就是最标准的原型模式.