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 的引用,可以动态地切换不同的排序策略,在运行时选择不同的具体策略类来实现排序。通过策略模式,可以将算法的选择与算法的实现分离,使得系统更加灵活和可扩展。

相关推荐
小码编匠7 小时前
WPF 中的高级交互通过右键拖动实现图像灵活缩放
后端·c#·.net
唐青枫14 小时前
C#.NET 定时任务与队列利器:Hangfire 完整教程
c#·.net
hez201020 小时前
Runtime Async - 步入高性能异步时代
c#·.net·.net core·clr
mudtools1 天前
.NET驾驭Word之力:玩转文本与格式
c#·.net
唐青枫2 天前
C#.NET 数据库开发提速秘籍:SqlSugar 实战详解
c#·.net
mudtools2 天前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
大飞pkz2 天前
【设计模式】C#反射实现抽象工厂模式
设计模式·c#·抽象工厂模式·c#反射·c#反射实现抽象工厂模式
唐青枫3 天前
从入门到进阶:C#.NET Stopwatch 计时与性能测量全攻略
c#·.net
Ronin3053 天前
【Linux系统】日志与策略模式
linux·策略模式·日志
未来之窗软件服务3 天前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟