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);
}
查看11道真题和解析