ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

软件设计模式之策略模式(Strategy)

2022-01-14 13:31:51  阅读:153  来源: 互联网

标签:软件设计 AlgorithmInterface 模式 strategy 算法 Strategy public


描述

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

实现

    /*
     策略模式
     */

    /// <summary>
    /// 策略模式抽象算法类
    /// </summary>
    abstract class Strategy
    {
        public abstract void AlgorithmInterface();

    }

    /// <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实现");
        }
    }

    /// <summary>
    /// 上下文接口
    /// </summary>
    class Context
    {
        Strategy _strategy;
        /// <summary>
        /// 初始化时传入策略对象
        /// </summary>
        /// <param name="strategy"></param>
        public Context(Strategy strategy)
        {
            _strategy = strategy;
        }

        /// <summary>
        /// 调用算法
        /// </summary>
        public void ContextInterface()
        {
            _strategy.AlgorithmInterface();
        }
    }

与简单工厂差别

工厂模式是创建型模式,适应对象的变化。
策略模式是行为性模式,适应行为的变化。

策略模式、简单工厂适用场景

我认为工厂模式适合的场景是不复杂的,比较具体的,比如文具:铅笔、尺子、橡皮;

策略模式则是适用于算法的,比如商场折扣:买200反20,买300反30;

标签:软件设计,AlgorithmInterface,模式,strategy,算法,Strategy,public
来源: https://www.cnblogs.com/zhoulei0517/p/15801498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有