策略模式就是将算法抽象出来变成一个策略,方便这个算法策略的改变。缺点就是客户端必须知道哪些情况使用哪些策略。
//策略接口 public interface IStrategy { int GetDamage(); }
//策略实现1 public class NormalStrategy : IStrategy { public int GetDamage() { return 10; } }
//策略实现2 public class DoubleStrategy : IStrategy { public int GetDamage() { return 2 * 10; } }
//Context客户端 using UnityEngine; public class Context : MonoBehaviour { private IStrategy strategy = new NormalStrategy(); void Update() { //根据情况来使用某种策略 if (Input.GetMouseButtonDown(0)) { if (strategy.GetType() == typeof(NormalStrategy)) { strategy = new DoubleStrategy(); } else { strategy = new NormalStrategy(); } } Debug.Log(strategy.GetDamage()); } }
很普遍的策略模式,比起桥接模式,策略模式还少了对使用者的抽象,只抽象了被引用的使用功能部分。