首页 > 其他分享 >Strategy Pattern-策略模式

Strategy Pattern-策略模式

时间:2023-08-23 20:12:20浏览次数:37  
标签:策略 Pattern 模式 Strategy 算法 array 排序 public

C#中的策略模式(Strategy Pattern)是一种行为型设计模式,它可以让你定义一族算法,并将每个算法封装起来,使它们可以相互替换,从而使得算法的变化独立于使用算法的客户端。

策略模式的核心思想是将算法的定义和使用分离,将不同的算法封装到独立的策略类中。这样,客户端可以根据需求从不同的策略中选择合适的算法进行使用,而不需要关心具体的算法实现细节。

在C#中,实现策略模式通常需要以下几个参与者:

策略接口(Strategy Interface):定义了所有具体策略类都需要实现的方法或属性。一般情况下,该接口会声明一个或多个算法操作。

具体策略类(Concrete Strategy):实现了策略接口,提供了具体的算法实现。

环境类(Context):包含一个策略对象,并使用策略对象来执行具体的算法。环境类通常会将算法的实际执行委托给策略对象。

下面是一个简单的示例代码,演示了如何使用策略模式来实现一个排序算法的示例:

namespace Strategy_Pattern_策略模式
{
    internal class Program
    {
        // 策略接口
        public interface ISortStrategy
        {
            void Sort(int[] array);
        }

        // 具体策略类
        public class BubbleSortStrategy : ISortStrategy
        {
            public void Sort(int[] array)
            {
                Console.WriteLine("使用冒泡排序算法对数组进行排序。");
                // 冒泡排序的具体实现
            }
        }

        public class QuickSortStrategy : ISortStrategy
        {
            public void Sort(int[] array)
            {
                Console.WriteLine("使用快速排序算法对数组进行排序。");
                // 快速排序的具体实现
            }
        }

        // 环境类
        public class SortContext
        {
            private ISortStrategy strategy;

            public SortContext(ISortStrategy strategy)
            {
                this.strategy = strategy;
            }

            public void SortArray(int[] array)
            {
                strategy.Sort(array);
            }
        }
        static void Main(string[] args)
        {
            // 创建排序算法上下文
            var context = new SortContext(new BubbleSortStrategy());

            // 定义要排序的数组
            int[] array = { 5, 2, 8, 10, 1 };

            // 调用排序算法
            context.SortArray(array);
            Console.Read();
            //输出结果
            //使用冒泡排序算法对数组进行排序。
        }
    }
}

上述示例中,策略接口 ISortStrategy 定义了排序算法的方法。具体策略类 BubbleSortStrategy 和 QuickSortStrategy 分别实现了具体的排序算法。环境类 SortContext 包含一个策略对象,并根据需要选择不同的策略来执行排序操作。

通过使用策略模式,我们可以根据实际需求选择不同的策略,而无需更改现有的代码结构。这使得算法的变化独立于客户端,并且可以灵活地添加、替换或移除现有的算法实现。

总结一下,策略模式可以帮助我们实现算法的封装和替换,使代码更加灵活、可扩展和可维护。在C#中,我们可以通过接口和多态来实现策略模式。

标签:策略,Pattern,模式,Strategy,算法,array,排序,public
From: https://www.cnblogs.com/ZHIZRL/p/17652669.html

相关文章

  • 某酒管集团-单例模式对性能的影响及思考
    摘要: 大概一年前开始在思考构造函数中依赖注入较多,这对系统性能及硬件资源消耗产生一些优化想法。一般较多公司的项目都使用Autofac 依赖注入(Scoped作用域),但是发现过多的对象产生会消耗 CPU,内存并给GC(垃圾回收)造成一定的压力。那么开始思考是否能够使用单例(Single......
  • StatePattern-状态模式
    C#中的状态模式是一种行为型设计模式,它允许对象在其内部状态发生改变时改变其行为。状态模式的核心思想是将对象的行为封装在不同的状态类中,对象根据当前状态的不同而执行不同的行为。在C#中,实现状态模式通常需要以下几个参与者:状态接口(StateInterface):定义了表示不同状态的方法......
  • springboot之RedisTemplate的访问单机,哨兵,集群模式
    springboot2默认已经使用了lettuce-core,没有使用jedis和Redisson,springboot1使用的是jedis。我使用的springboot版本是2.6.14。(对应的lettuce版本为6.1.10.RELEASE,对应jedis版本为3.7.1)<dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactI......
  • 前端发布订阅模式
    前端发布订阅是一种用于实现应用程序内各个组件之间通信的技术,它可以让组件之间解耦,提高应用程序的灵活性和可维护性。本文将结合代码介绍前端发布订阅的概念、作用、应用场景以及如何设置和管理它们。一、概念和作用前端发布订阅是一种消息传递模式,它允许组件之间通过发布和订阅......
  • Java代理模式初探
    代理模式是一种常见的软件设计模式。所谓的代理者是指一个类别可以作为其它对象的接口。代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它重要或无法复制的资源。有时候我们需要需要一个功能(通常是一个API)。该功能已经被某个类A实现了,代理类B实现相同的接口,并将......
  • 混合开发模式是否可以在App备案制度下突围
    网站ICP备案已施行了很久,我们也非常清楚必须在进行ICP备案后,网站才能在大陆范围合法运营,并且用户可以通过域名正常访问网站。但是月初出了新规,明年起,国内的App也要像网站一样进行备案了。想必大家也是早已经听到过这个刷屏的新闻,随便说一声小程序也是。在管理日益强化的......
  • 多轨模式——保存导出混缩
    贴在一起的时候,会自动匹配到如果想把多轨变成三轨,就可以这样子做......
  • SAP ABAP 模式(Pattern)、模板的创建与调用
    1.代码模板2.模式(Pattern) 调用3.标准模式,一些内置固定格式代码的填充  ......
  • 多轨模式——音量与立体音包络线
    这个是主控,可以控制上面所有的音频轨道可以改左右声音大小立体声平衡,调整左右边音量如何来打关键帧,直接打这根线就好了上面的线是音量,下面的线是左右觉得过渡太生硬了,选择关键帧,曲线。这个是静音当前轨道这个是soloR是录音,注意录音的时候要把别的删掉......
  • IteratorPattern-迭代器模式
    在C#中,迭代器模式(IteratorPattern)是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露聚合对象的内部表示。迭代器模式有以下几个关键角色:Iterator(迭代器):定义访问和遍历元素的接口。ConcreteIterator(具体迭代器):实现迭代器接口,实现对聚合对象的......