c# 策略模式

在 C# 中,策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到具有公共接口的独立类中,使得它们可以互相替换。这样可以使得算法的选择独立于算法的使用者,从而提高了灵活性和可维护性。

以下是策略模式的关键要点:

  1. 策略接口:定义算法家族的抽象,通常是一个接口或者抽象类。

  2. 具体策略类:实现策略接口,封装了具体的算法实现。

  3. 环境类(Context):持有一个策略接口的引用,并在运行时可以切换不同的具体策略类。

示例:

csharp 复制代码
// 策略接口
public interface ISortingStrategy
{
    void Sort(int[] data);
}

// 具体策略类
public class BubbleSortStrategy : ISortingStrategy
{
    public void Sort(int[] data)
    {
        Console.WriteLine("Sorting using Bubble Sort");
        // 实现具体的冒泡排序算法
    }
}

public class QuickSortStrategy : ISortingStrategy
{
    public void Sort(int[] data)
    {
        Console.WriteLine("Sorting using Quick Sort");
        // 实现具体的快速排序算法
    }
}

// 环境类
public class Sorter
{
    private ISortingStrategy _sortingStrategy;

    public Sorter(ISortingStrategy sortingStrategy)
    {
        _sortingStrategy = sortingStrategy;
    }

    public void SetSortingStrategy(ISortingStrategy sortingStrategy)
    {
        _sortingStrategy = sortingStrategy;
    }

    public void SortData(int[] data)
    {
        _sortingStrategy.Sort(data);
    }
}

class Program
{
    static void Main(string[] args)
    {
        int[] data = { 5, 2, 8, 1, 7, 3 };
        
        Sorter sorter = new Sorter(new BubbleSortStrategy());
        sorter.SortData(data); // 使用冒泡排序

        sorter.SetSortingStrategy(new QuickSortStrategy());
        sorter.SortData(data); // 使用快速排序
    }
}

在上面的示例中,ISortingStrategy 是一个策略接口,定义了排序算法的抽象方法。BubbleSortStrategyQuickSortStrategy 类分别实现了这个接口,分别代表了冒泡排序和快速排序的具体算法实现。Sorter 类是环境类,它持有一个 ISortingStrategy 的引用,可以动态地切换不同的排序策略,在运行时选择不同的具体策略类来实现排序。通过策略模式,可以将算法的选择与算法的实现分离,使得系统更加灵活和可扩展。

相关推荐
格林威15 小时前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
J总裁的小芒果16 小时前
参数过多-分批传参
c#
典典分享指南16 小时前
短视频分镜提示词:让 AI 出片的产品口播
java·c#·bash·composer·symfony
Z59981784117 小时前
c#软件开发学习笔记--WPF(Canvas、数据绑定、MVVM模式、值转换器)
笔记·学习·c#
淡海水19 小时前
05-03-栈队列-PriorityQueue-TElement-TPriority-NET6优先队列语义与四叉堆实现
服务器·前端·c#·priorityqueue·clr·telement
leonkay1 天前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
CSDN_RTKLIB1 天前
数据库七大符号表
c#
leonkay1 天前
C# 特性(Attribute)——【2】工业设备参数框架设计
经验分享·面试·架构·c#·学习方法·设计
2501_906565121 天前
小创 · 智能助手
开发语言·c#
datalover2 天前
【无标题】
c#·linq