定义算法家族,封装每个算法,使它们可以互相替换,算法变化不影响客户端。
// 策略接口 public interface ISortStrategy { void Sort(List<int> list); } // 冒泡排序策略 public class BubbleSort : ISortStrategy { public void Sort(List<int> list) { Console.WriteLine("使用冒泡排序"); for (int i = 0; i < list.Count - 1; i++) { for (int j = 0; j < list.Count - i - 1; j++) { if (list[j] > list[j + 1]) { (list[j], list[j + 1]) = (list[j + 1], list[j]); } } } } } // 快速排序策略 public class QuickSort : ISortStrategy { public void Sort(List<int> list) { Console.WriteLine("使用快速排序"); QuickSortInternal(list, 0, list.Count - 1); } private void QuickSortInternal(List<int> list, int left, int right) { // 快速排序实现逻辑 } } // 上下文类 public class Sorter { private ISortStrategy _strategy; public Sorter(ISortStrategy strategy) => _strategy = strategy; public void SetStrategy(ISortStrategy strategy) => _strategy = strategy; public void SortList(List<int> list) => _strategy.Sort(list); } // 调用示例 public static void TestStrategy() { var list = new List<int> { 3, 1, 4, 1, 5, 9 }; var sorter = new Sorter(new BubbleSort()); sorter.SortList(list); sorter.SetStrategy(new QuickSort()); sorter.SortList(list); }