策略模式定义了算法集合,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。简单点说,策略模式就是用来封装算法的一种设计模式。使用场景有很多,比如商场促销活动、车辆调度等等。
1、定义抽象类
abstract class BaseStrategy { public abstract void GetStrategy(); }
2、实现抽象类
class DeriveStrategyA : BaseStrategy { public override void GetStrategy() { Console.WriteLine("继承抽象类,实现算法A"); } } class DeriveStrategyB : BaseStrategy { public override void GetStrategy() { Console.WriteLine("继承抽象类,实现算法B"); } } class DeriveStrategyC : BaseStrategy { public override void GetStrategy() { Console.WriteLine("继承抽象类,实现算法C"); } }
3、定义一个类,可以根据传入的参数创建相应的子类对象,并执行该类的方法。
class Context { private BaseStrategy bs; public void CreateStrategy(BaseStrategy bs) { this.bs = bs; } public void ContextStrategy() { bs.GetStrategy(); } }
4、客户端调用
static void Main(string[] args) { Context context = new Context(); context.CreateStrategy(new DeriveStrategyA()); context.ContextStrategy(); context.CreateStrategy(new DeriveStrategyB()); context.ContextStrategy(); context.CreateStrategy(new DeriveStrategyC()); context.ContextStrategy(); Console.ReadKey(); }
5、运行结果
6、备注:
真实业务场景中客户端可以将策略模式和工厂模式结合起来获得需要的子类对象,或者客户端将标识符传到后台,由后台的Context类中使用工厂模式获得需要的子类对象。