zoukankan      html  css  js  c++  java
  • 设计模式之策略模式

    设计模式:

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

    示例代码:

    • 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();
    }
    
  • 相关阅读:
    二叉树的遍历
    十进制与m进制的相互转化
    【素数】Prime Distance
    【数论】Sumdiv(整数的唯一分解定理+约束和公式+递归求等比)
    【错位+组合】排列计数
    【扩展欧几里得】青蛙的约会
    【归并排序+逆序数】poj-2299 Ultra-QuickSort
    【模拟】Sandglass
    【位运算】高效解决n皇后问题
    Popular Cows
  • 原文地址:https://www.cnblogs.com/sanjun/p/8359101.html
Copyright © 2011-2022 走看看