设计模式-原型模式
参考章节:https://gpp.tkchu.me/prototype.html
脑内画面
原型模式把“创建一个新对象”变成“复制一个已经配置好的样板”。它像关卡编辑器里的复制粘贴:设计师先做出一只带属性、掉落、AI 参数的怪物样本,生成器以后只负责克隆。
它解决的问题
当对象构造过程很复杂,或者类型组合来自数据配置时,继续写一堆 new EnemyA(...)、new EnemyB(...) 会让创建逻辑散落在代码里。原型模式让对象自己知道如何复制自己,生成器只依赖“可克隆”的抽象。
C# 示例
public interface IPrototype<out T>
{
T Clone();
}
public sealed class Monster : IPrototype<Monster>
{
public string Name { get; private set; }
public int Health { get; private set; }
public List<string> LootTable { get; }
public Monster(string name, int health, IEnumerable<string> lootTable)
{
Name = name;
Health = health;
LootTable = new List<string>(lootTable);
}
public Monster Clone()
{
return new Monster(Name, Health, LootTable);
}
public void ScaleForLevel(int level)
{
Health += level * 10;
}
}
public sealed class Spawner
{
private readonly Monster _prototype;
public Spawner(Monster prototype)
{
_prototype = prototype;
}
public Monster Spawn(int level)
{
var monster = _prototype.Clone();
monster.ScaleForLevel(level);
return monster;
}
}
什么时候用
- 创建对象需要大量默认参数。
- 运行时才知道要创建哪种对象。
- 数据驱动对象比继承层级更自然。
- 编辑器里需要复制预制体、技能、单位、任务模板。
使用时的锋利边
C# 里的浅拷贝很诱人,但游戏对象往往包含列表、引用、资源句柄。要明确哪些字段共享,哪些字段深拷贝。资源资产可以共享,运行时状态通常要复制。
原型适合“从样板派生实例”,但不适合隐藏复杂生命周期。对象需要注册系统、申请资源、绑定事件时,克隆后仍要有清晰的初始化阶段。
1446

被折叠的 条评论
为什么被折叠?



