Unity 策略模式

初学者,自用笔记

把一类“可互换的算法/行为”封装成独立策略对象,并通过组合(持有策略引用)而不是继承,让上下文(Context)在运行时自由切换不同策略,从而避免大量 if/else 或子类爆炸

类似于桥接模式,改变抽象实现快速替换

常用于行为树等......

  • Strategy(策略接口):定义统一入口(如 Calculate() / Execute())。
  • ConcreteStrategy(具体策略):不同算法实现(暴击计算、寻路、AI 决策、定价规则等)。
  • Context(上下文):持有策略并调用它;可在运行时替换策略。

简单例子

Strategy

// Strategy:统一的伤害计算接口
public interface IDamageStrategy
{
    int Calculate(int baseDamage);
}

ConcreteStrategy

// ConcreteStrategy:普通伤害
public sealed class NormalDamage : IDamageStrategy
{
    public int Calculate(int baseDamage) => baseDamage;
}

// ConcreteStrategy:暴击伤害
public sealed class CritDamage : IDamageStrategy
{
    private readonly float _multiplier;
    public CritDamage(float multiplier) => _multiplier = multiplier;

    public int Calculate(int baseDamage) => Mathf.RoundToInt(baseDamage * _multiplier);
}

Context

// Context:持有策略并在运行时切换
public sealed class DamageContext
{
    private IDamageStrategy _strategy;

    public DamageContext(IDamageStrategy strategy) => _strategy = strategy;

    public void SetStrategy(IDamageStrategy strategy) => _strategy = strategy;

    public int GetDamage(int baseDamage) => _strategy.Calculate(baseDamage);
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务