游戏编程模式05-设计模式-原型模式

设计模式-原型模式

参考章节:https://gpp.tkchu.me/prototype.html

脑内画面

原型模式把“创建一个新对象”变成“复制一个已经配置好的样板”。它像关卡编辑器里的复制粘贴:设计师先做出一只带属性、掉落、AI 参数的怪物样本,生成器以后只负责克隆。

怪物原型
血量/速度/掉落/AI

实例 A

实例 B

实例 C

它解决的问题

当对象构造过程很复杂,或者类型组合来自数据配置时,继续写一堆 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# 里的浅拷贝很诱人,但游戏对象往往包含列表、引用、资源句柄。要明确哪些字段共享,哪些字段深拷贝。资源资产可以共享,运行时状态通常要复制。

原型适合“从样板派生实例”,但不适合隐藏复杂生命周期。对象需要注册系统、申请资源、绑定事件时,克隆后仍要有清晰的初始化阶段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值