C# 策略模式(Strategy)

策略模式(Strategy):定义一系列的算法,将每一个算法封装起来,并且使它们可以相互替换。

首先,定义一个接口ISortStrategy,表示排序算法的策略:


public interface ISortStrategy  
{  
    void Sort(List<int> list);  
}

然后,定义几种不同的排序策略类,这些类实现了ISortStrategy接口:

//也可以将方法写在一个类中
public class BubbleSortStrategy : ISortStrategy  
{  
    public void Sort(List<int> list)  
{  
        Console.WriteLine("Sorting using Bubble Sort");  
        // 实现冒泡排序算法  
        // ...  
    }  
}  
  
public class QuickSortStrategy : ISortStrategy  
{  
    public void Sort(List<int> list)  
{  
        Console.WriteLine("Sorting using Quick Sort");  
        // 实现快速排序算法  
        // ...  
    }  
}

接着,定义一个上下文类Context,它持有一个排序策略对象:

public class Context  
{  
    private ISortStrategy _sortStrategy;  
    public ISortStrategy SortStrategy { get { return _sortStrategy; } set { _sortStrategy = value; } }  
    
    public Context(ISortStrategy sortStrategy)   
    {   
        _sortStrategy = sortStrategy;   
    }   
    
    public void Sort(List<int> list)   
    {   
        _sortStrategy.Sort(list);   
    }   
}

最后,创建一个客户端程序来使用这些类:

public class ClientProgram  
{  
    public static void Main(string[] args)  
    {  
        Context context = new Context(new QuickSortStrategy()); // 创建Context并设置初始排序策略为QuickSortStrategy  
        List<int> numbers = new List<int> { 5, 2, 9, 1, 5, 6 }; // 需要排序的数字列表  
        context.Sort(numbers); // 调用Sort方法来执行排序,该方法会触发排序算法的执行。  
    }  
}

相关推荐

  1. C# 策略模式Strategy

    2024-01-31 11:38:04       30 阅读
  2. 策略模式Strategy

    2024-01-31 11:38:04       37 阅读
  3. 策略模式Strategy mode)

    2024-01-31 11:38:04       19 阅读
  4. C++11 设计模式7 策略模式Strategy

    2024-01-31 11:38:04       7 阅读
  5. 设计模式-策略模式 Strategy

    2024-01-31 11:38:04       28 阅读
  6. 设计模式——策略模式Strategy

    2024-01-31 11:38:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 11:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 11:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 11:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 11:38:04       18 阅读

热门阅读

  1. Threejs API——`OrbitControls`相机控件

    2024-01-31 11:38:04       32 阅读
  2. Nginx中日志模块的应用和配置!

    2024-01-31 11:38:04       32 阅读