策略模式包含三个角色:
- 环境(Context)角色:持有一个Strategy类的引用。
- 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
- 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
Strategy类(抽象策略)
abstract class Strategy { //算法方法 public abstract void AlgorithmInterface(); }
ConcreteStrategy类(具体策略)
//具体算法A class ConcreteStrategyA:Strategy { //算法A实现方法 public override void AlgorithmInterface(); { Console.WriteLine("算法A实现"); } } //具体算法B class ConcreteStrategyB:Strategy { //算法B实现方法 public override void AlgorithmInterface(); { Console.WriteLine("算法B实现"); } } //具体算法C class ConcreteStrategyC:Strategy { //算法C实现方法 public override void AlgorithmInterface(); { Console.WriteLine("算法C实现"); } }
Context类(环境)
//上下文 class Context { Strategy strategy; public Context(Strategy stratety) //初始化时,传入具体的策略对象 { this.strategy=strategy; } //上下文接口 public void ContextInteface() //根据具体的策略对象,调用其算法的方法 { strategy.AlgorithmInterface(); } }
客户端代码
static void Main(string[] args) { Context context; //由于实例化不同的策略,所以最终在调用context.ContextInterface()时,所获得的结果不尽相同 context=new Context(new ConcreteStrategyA()); context.ContextInterface(); context=new Context(new ConcreteStrategyB()); context.ContextInterface(); context=new Context(new ConcreteStrategyC()); context.ContextInterface(); Console.Read(); }