zoukankan      html  css  js  c++  java
  • 设计模式学习笔记策略模式

    策略模式:Strategy,它定义了算法家族,分别封装起来,让他们之间可以相互替换,让算法的变化不会影响到算法使用者

    1.定义抽象算法

        /// <summary>
    /// 抽象算法类
    /// </summary>
    abstract class Strategy
    {
    /// <summary>
    /// 算法方法 接口定义
    /// </summary>
    public abstract void AlgorithmInterface();
    }

    2.具体算法的实现

      /// <summary>
    /// 具体算法A
    /// </summary>
    class ConcreteStrategyA : Strategy
    {
    public override void AlgorithmInterface()
    {
    Console.WriteLine(
    "算法A的实现");
    }
    }
    /// <summary>
    /// 具体算法B
    /// </summary>
    class ConcreteStrategyB : Strategy
    {
    public override void AlgorithmInterface()
    {
    Console.WriteLine(
    "算法B的实现");
    }
    }
    /// <summary>
    /// 具体算法C
    /// </summary>
    class ConcreteStrategyC : Strategy
    {
    public override void AlgorithmInterface()
    {
    Console.WriteLine(
    "算法C的实现");
    }
    }

    3.调度类

        /// <summary>
    /// 承上启下的算法调用
    /// </summary>
    class Context
    {
    Strategy strategy;
    /// <summary>
    /// 传入具体策略对象
    /// </summary>
    /// <param name="strategy"></param>
    public Context(Strategy strategy)
    {
    this.strategy = strategy;
    }
    /// <summary>
    /// 根据策略对象的值判断调用的算法类
    /// </summary>
    public void ContextInterface()
    {
    strategy.AlgorithmInterface();
    }
    }

      客户端调用:

            /// <summary>
    /// 测试策略
    /// </summary>
    static void TestStrategy()
    {
    Context context;
    //策略A
    context = new Context(new ConcreteStrategyA());
    context.ContextInterface();
    //策略B
    context = new Context(new ConcreteStrategyB());
    context.ContextInterface();
    //策略C
    context = new Context(new ConcreteStrategyC());
    context.ContextInterface();
    Console.Read();
    }

      策略模式比较简单但是应用非常的多


  • 相关阅读:
    php 全局变量 2
    PHP 全局变量 1
    巧用sublime
    ini_get和ini_set
    sublime安装sftp
    常用数组函数
    二维数组去重
    判断常量
    system(),exec() ,passthru()
    【收集】Python 微优化
  • 原文地址:https://www.cnblogs.com/jqbird/p/2140133.html
Copyright © 2011-2022 走看看