定义一系列算法,将它们一个个封装起来,而且使它们能够互相替换,该模式使得算法可独立于使用它的客户而变化。 --《设计模式》GoF算法
1,抽象策略角色(Strategy):定义公共接口,Context上下文使用这个接口调用不一样的算法,通常使用接口实现(也可使用抽象类)。设计模式
2,具体策略角色(ConcreteStrategy):接口的实现,实现具体的算法。app
3,上下文角色(Context):维护一个策略对象的引用,并用定义容许策略访问其数据的接口。ide
using System; namespace DoFactory.GangOfFour.Strategy.Structural { /// <summary> /// MainApp startup class for Structural /// Strategy Design Pattern. /// </summary> class MainApp { /// <summary> /// Entry point into console application. /// </summary> static void Main() { Context context; // Three contexts following different strategies context = new Context(new ConcreteStrategyA()); context.ContextInterface(); context = new Context(new ConcreteStrategyB()); context.ContextInterface(); // Wait for user Console.ReadKey(); } } /// <summary> /// The 'Strategy' abstract class /// </summary> abstract class Strategy { public abstract void AlgorithmInterface(); } /// <summary> /// A 'ConcreteStrategy' class /// </summary> class ConcreteStrategyA : Strategy { public override void AlgorithmInterface() { Console.WriteLine( "Called ConcreteStrategyA.AlgorithmInterface()"); } } /// <summary> /// A 'ConcreteStrategy' class /// </summary> class ConcreteStrategyB : Strategy { public override void AlgorithmInterface() { Console.WriteLine( "Called ConcreteStrategyB.AlgorithmInterface()"); } } /// <summary> /// The 'Context' class /// </summary> class Context { private Strategy _strategy; // Constructor public Context(Strategy strategy) { this._strategy = strategy; } public void ContextInterface() { _strategy.AlgorithmInterface(); } } }
运行结果:this