在 C# 中,策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到具有公共接口的独立类中,使得它们可以互相替换。这样可以使得算法的选择独立于算法的使用者,从而提高了灵活性和可维护性。
以下是策略模式的关键要点:
策略接口:定义算法家族的抽象,通常是一个接口或者抽象类。
具体策略类:实现策略接口,封装了具体的算法实现。
环境类(Context):持有一个策略接口的引用,并在运行时可以切换不同的具体策略类。
示例:
// 策略接口
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
是一个策略接口,定义了排序算法的抽象方法。BubbleSortStrategy
和 QuickSortStrategy
类分别实现了这个接口,分别代表了冒泡排序和快速排序的具体算法实现。Sorter
类是环境类,它持有一个 ISortingStrategy
的引用,可以动态地切换不同的排序策略,在运行时选择不同的具体策略类来实现排序。通过策略模式,可以将算法的选择与算法的实现分离,使得系统更加灵活和可扩展。