设计模式-策略模式(Strategy Pattern)

策略模式

策略模式是一种行为设计模式,它将一组行为转换为对象,并在运行时可以动态的进行切换。

Strategy

算法接口,Context通过这个接口来调用由ConcreteStrategy定义的算法

ConcreteStrategy

Strategy接口的实现

Context

维护对Strategy对象的引用,将所有计算延迟到ConcreteStrategy

示例代码

    public class SortedList
    {
        private List<string> list = new List<string>();
        private SortStrategy sortstrategy;
        public void SetSortStrategy(SortStrategy sortstrategy)
        {
            this.sortstrategy = sortstrategy;
        }
        public void Add(string name)
        {
            list.Add(name);
        }
        public void Sort()
        {
            sortstrategy.Sort(list);
            // Iterate over list and display results
            foreach (string name in list)
            {
                Console.WriteLine(" " + name);
            }
            Console.WriteLine();
        }
    }

    public abstract class SortStrategy
    {
        public abstract void Sort(List<string> list);
    }

    public class MergeSort : SortStrategy
    {
        public override void Sort(List<string> list)
        {
            Console.WriteLine("MergeSorted list ");
        }
    }

    public class QuickSort : SortStrategy
    {
        public override void Sort(List<string> list)
        {
            list.Sort();  // Default is Quicksort
            Console.WriteLine("QuickSorted list ");
        }
    }

    public class ShellSort : SortStrategy
    {
        public override void Sort(List<string> list)
        {
            Console.WriteLine("ShellSorted list ");
        }
    }

//--------------------------------------------------
    SortedList studentRecords = new SortedList();
    studentRecords.Add("Samual");
    studentRecords.Add("Jimmy");
    studentRecords.Add("Sandra");
    studentRecords.Add("Vivek");
    studentRecords.Add("Anna");
    studentRecords.SetSortStrategy(new QuickSort());
    studentRecords.Sort();
    studentRecords.SetSortStrategy(new ShellSort());
    studentRecords.Sort();
    studentRecords.SetSortStrategy(new MergeSort());
    studentRecords.Sort();
posted @ 2022-03-12 14:26  壮哈苗  阅读(52)  评论(0编辑  收藏  举报