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

    策略模式定义了算法集合,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。简单点说,策略模式就是用来封装算法的一种设计模式。使用场景有很多,比如商场促销活动、车辆调度等等。

    1、定义抽象类

    abstract class BaseStrategy
    {
        public abstract void GetStrategy();
    }
    

    2、实现抽象类

    class DeriveStrategyA : BaseStrategy
    {
        public override void GetStrategy()
        {
            Console.WriteLine("继承抽象类,实现算法A");
        }
    }
    
    class DeriveStrategyB : BaseStrategy
    {
        public override void GetStrategy()
        {
            Console.WriteLine("继承抽象类,实现算法B");
        }
    }
    
    class DeriveStrategyC : BaseStrategy
    {
        public override void GetStrategy()
        {
            Console.WriteLine("继承抽象类,实现算法C");
        }
    }
    

    3、定义一个类,可以根据传入的参数创建相应的子类对象,并执行该类的方法。

    class Context
    {
        private BaseStrategy bs;
        public void CreateStrategy(BaseStrategy bs)
        {
            this.bs = bs;
        }
        public void ContextStrategy()
        {
            bs.GetStrategy();
        }
    }
    

    4、客户端调用

    static void Main(string[] args)
    {
        Context context = new Context();
        context.CreateStrategy(new DeriveStrategyA());
        context.ContextStrategy();
    
        context.CreateStrategy(new DeriveStrategyB());
        context.ContextStrategy();
    
        context.CreateStrategy(new DeriveStrategyC());
        context.ContextStrategy();
    
        Console.ReadKey();
    }
    

    5、运行结果

     6、备注:

       真实业务场景中客户端可以将策略模式和工厂模式结合起来获得需要的子类对象,或者客户端将标识符传到后台,由后台的Context类中使用工厂模式获得需要的子类对象。

     

  • 相关阅读:
    ES5 ES6 作用域声明部分
    js 内建函数reduce
    $apply的使用与否
    得分-星星
    CSS3中translate、transform和translation的区别和联系
    vue 学习笔记
    -webkit-line-clamp 多行文字溢出...
    八位二进制数为什么表示范围(-128~~+127)理解
    vs2017_enterprise正式版离线安装包bt下载
    RSA密钥之C#格式与Java格式转换
  • 原文地址:https://www.cnblogs.com/sunice/p/6624390.html
Copyright © 2011-2022 走看看