策略模式是什么?
它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。
结构图:
从定义中我们得知,策略模式是定义了算法,所以我们以超市结账的例子展示一下策略模式。从上面的结构图中我们看到有一个策略类,所以我们要有一个策略类。
abstract class Strategy { public abstract void AlgorithmInterface(); }
策略类被继承的具体算法
//算法A实现方法 class ConcreteStrategyA:strategy { public override void AlgorithmInterface() { console.writeLone("算法A实现"); } } //具体算法B class ConcreteStrategyB:strategy { public override void AlgorithmInterface() { console.writeLone("算法B实现"); } } //具体算法C class ConcreteStrategyC:strategy { public override void AlgorithmInterface() { console.writeLone("算法C实现"); } }
context类
class Context { Strategy strategy; public Context(strategy strategy) { this.strategy=strategy; } //上下文接口 public void ContextInterface() { strategy.AlgorhmInterface(); } }
客户端
static void main (string [] args) { Context context; context=new context(new ConcreteStrategyA()); context.ContextInterface(); context=new Context(new ConcreteStrategyB()); context.ContextInterface(); context=new Context(new ConcreteStrategyC()); context.ContextInterface(); }