设计模式之策略模式

设计模式:

  • 它定义了算法家族,分别封装起来,让它们之间可以替换,此模式让算法的变化,不会影响到使用算法的客户。

示例代码:

  • Strategy类,定义所有支持的算法的公共接口
//抽象算法类
abstract class Strategy {
    //算法方法
    public abstract void AlgorithmInterface();
}
  • ConcreteStrategy,封装了具体的算法或行为,继承于Strategy
//具体算法A
class ConcreteStrategyA : Strategy {
    //算法A实现方法
    public override void AlgorithmInterface() {
        Console.WriteLine("算法A实现");
    }
}

//具体算法B
class ConcreteStrategyB : Strategy {
    //算法B实现方法
    Console.WriteLine("算法B实现");
}

//具体算法C
class ConcreteStrategyC : Strategy {
    //算法C实现方法
    Console.WriteLine("算法C实现");
}
  • Context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用
//上下文
class Context {
    Strategy strategy;
    //初始化时,传入具体的策略对象
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    //上下文接口
    //根据具体的策略对象,调用其算法的方法
    public void ContextInterface() {
        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();
}
posted @ 2018-01-26 13:38  _sanjun  阅读(116)  评论(0编辑  收藏  举报