如何在.Net中使用策略设计模式

设计模式用于解决软件开发中的常见设计问题,并降低我们源代码的复杂性。 设计模式可以是创新的(与对象创建有关),结构的(与对象组装有关)或行为的(与对象协作和职责分离有关)。

策略设计模式是四人一组(GoF)设计模式 。 这是一种行为模式,用于定义一系列算法并将每个算法封装在一个类中。 这些封装的算法可以互换-即,它们可以根据不同的输入而变化,而与使用它们的客户端无关。

[ 小心! 每个开发人员都应避免的8个职业陷阱 要成为一名真正的软件开发人员,必须阅读7本书 即使是经验丰富的开发人员,也会犯15个菜鸟错误 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

换句话说,策略设计模式将实现代码分解为具体的类,从而提高了可重用性。 本文介绍了策略设计模式及其如何在C#中实现的讨论。

策略设计模式参与者

策略设计模式的典型实施方案的参与者包括:

  • 策略-用于声明所有具体策略类型的公共接口。 上下文利用策略接口在运行时调用算法。
  • ConcreteStrategy —用于实现在Strategy接口中声明的算法。
  • 上下文-包含对Strategy实例的引用,并使用该引用来调用由具体策略类型定义的算法。

在C#中实现Strategy接口

到目前为止,一切都很好。 现在我们有了概念,现在让我们实现模式。 假设您要设计一种用于排序算法的策略。 例如,假设您需要对整数数组进行排序。 有很多排序算法,因此您想推迟选择要使用的排序算法。 这是策略设计模式起作用的地方。

以下抽象类表示策略类型。 此类包含抽象Sort方法的声明。

abstract class SortStrategy
  {
    public abstract void Sort(int[] list);
  }

具体的策略类实现了Sort方法,并表示一种排序算法。 在此示例中,我们考虑了以下排序算法:

  1. 快速分类
  2. 贝壳类
  3. 气泡排序
  4. 合并排序
  5. 堆排序

在C#中实现ConcreteStrategy类

下面显示的具体策略类扩展了SortStrategy抽象类并实现了Sort方法。

class QuickSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Quick Sort");
        }
    }
    class ShellSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Shell Sort");
        }
    }
    class BubbleSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Bubble Sort");
        }
    }
    class MergeSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Merge Sort");
        }
    }
    class HeapSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Heap Sort");
        }
    }

请注意,我将留给您在每个具体策略类的Sort方法中实现排序算法。

在C#中实现Context类

Context类包含对SortStrategy的引用。 它还包含两个方法-SetSortStrategy方法和Sort方法。 前者用于设置要使用的排序策略,而后者用于根据所选的排序策略来调用Sort方法。

class Context
    {
        private const int MAX = 10;
        private int[] numbers = new int[MAX];
        private SortStrategy _sortstrategy;
        public void SetSortStrategy(SortStrategy sortstrategy)
        {
            _sortstrategy = sortstrategy;
        }
        public void Sort()
        {
            _sortstrategy.Sort(numbers);
        }
    }

下面的代码段显示了如何创建Context类的实例,传递排序策略以及调用Sort方法。

static void Main(string[] args)
        {
            Context context = new Context();
            context.SetSortStrategy(new QuickSort());
            context.Sort();
            Console.Read();
        }

下面提供了完整的源代码供您参考。

using System;
namespace StrategyDesignPattern
{
    abstract class SortStrategy
    {
        public abstract void Sort(int[] list);
    }
    class QuickSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Quick Sort");
        }
    }
    class ShellSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Shell Sort");
        }
    }
    class BubbleSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Bubble Sort");
        }
    }
    class MergeSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Merge Sort");
        }
    }
    class HeapSort : SortStrategy
    {
        public override void Sort(int[] list)
        {
            Console.WriteLine("Heap Sort");
        }
    }
    class Context
    {
        private const int MAX = 10;
        private int[] numbers = new int[MAX];
        private SortStrategy _sortstrategy;
        public void SetSortStrategy(SortStrategy sortstrategy)
        {
            _sortstrategy = sortstrategy;
        }
        public void Sort()
        {
            _sortstrategy.Sort(numbers);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            context.SetSortStrategy(new QuickSort());
            context.Sort();
            Console.Read();
        }
    }
}

当您运行该程序时,以下文本消息将显示在控制台窗口中:

快速排序

顾名思义,策略设计模式是一种以多种方式解决问题的策略。 策略设计模式可用于封装对象的不同行为,并在不同情况下使用它们。 策略设计模式的一些典型用例包括实现排序算法,实现不同的文件压缩算法,实现各种类型的序列化等。

From: https://www.infoworld.com/article/3387130/how-to-use-the-strategy-design-pattern-in-net.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值