使用场景:是一种定义了一系列算法的方法。是每个算法耦合性降低,方便单元测试。代码重用率高
结构图:
还是拿简单工厂的例子来改,简单工厂是Factory,策略是Context
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyMo.StrategyMode { public abstract class Strategy { public abstract void AlgorithmInterface(); } public class ConcreteStrategyA : Strategy { public override void AlgorithmInterface() { Console.WriteLine("算法A的实现"); } } public class ConcreteStrategyB : Strategy { public override void AlgorithmInterface() { Console.WriteLine("算法B的实现"); } } public class ConcreteStrategyC : Strategy { public override void AlgorithmInterface() { Console.WriteLine("算法C的实现"); } } public class Context { Strategy strategy; public Context(Strategy _strategy) { this.strategy = _strategy; } public void AlgorithmInterface() { strategy.AlgorithmInterface(); } } }
使用方式:
//策略模式 ay 杨洋 ayui Context context = new Context(new ConcreteStrategyC()); context.AlgorithmInterface();
效果:
接下来,我们跟简单工厂结合
新增工厂类
public class ContextFactory { public static Context GetContext(string context) { switch (context) { case "A": return new Context(new ConcreteStrategyA()); case "B": return new Context(new ConcreteStrategyB()); case "C": return new Context(new ConcreteStrategyC()); default: return new Context(new ConcreteStrategyA()); } } }
使用方法 www.ayjs.net
Context contextFactory = ContextFactory.GetContext("A"); contextFactory.AlgorithmInterface();
效果图:
在WPF中,业务中可能会遇到,但是说在控件开发中,我还没用到。