C#策略模式 摘自jspcool

C#策略模式  结构图
                                                                                                                                             





C#策略模式主要可以作用很轻松动态调用算法

如上图 有3个算法 MergeSort    QuickSort    ShellSort  排序算法 都继承SortStrategy 抽象类

最后通过 SortedList  以SortStrategy为基础进行包装 以便客户端动态调用

public abstract class SortStrategy
{

    abstract public void Sort(ArrayList list);
}

public class QuickSort : SortStrategy //这里是算法类
{

    public override void Sort(ArrayList list)
    {
        list.Sort(); 
        HttpContext.Current.Response.Write("QuickSorted list");
    }
}

public class ShellSort : SortStrategy //这里是算法类
{

    public override void Sort(ArrayList list)
    {
        //list.ShellSort();
        HttpContext.Current.Response.Write("ShellSorted list");
    }
}

public class MergeSort : SortStrategy //这里是算法类
{

    public override void Sort(ArrayList list)
    {
        //list.MergeSort();
        HttpContext.Current.Response.Write("MergeSorted list ");
    }
}



SortedList 包装类 对  如下

public class SortedList
{

    private ArrayList list = new ArrayList();
    private SortStrategy sortstrategy;

  
    public void SetSortStrategy(SortStrategy sortstrategy)
    {
        this.sortstrategy = sortstrategy;
    }

  
    public void Sort()
    {
        sortstrategy.Sort(list);
    }
    
  
   public void Add(string name)
    {
        list.Add(name);
    }

    public void Display()
    {
        foreach (string name in list)
            HttpContext.Current.Response.Write(" " + name);
    }
}

客户端调用包装类如下

 SortedList studentRecords = new SortedList();
        studentRecords.Add("3");
        studentRecords.Add("2");
        studentRecords.Add("4");
        studentRecords.Add("1");
        studentRecords.Add("5");

        studentRecords.SetSortStrategy(new QuickSort());//调用QuickSort算法
        //studentRecords.SetSortStrategy(new ShellSort());//调用ShellSort算法
        //studentRecords.SetSortStrategy(new MergeSort ());//调用MergeSort 算法


        studentRecords.Sort();
        studentRecords.Display();


Strategy策略模式适合下列场合:

  1.以不同的格式保存文件;

  2.以不同的算法压缩文件;

  3.以不同的算法截获图象;

  4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。


 

原文地址:https://www.cnblogs.com/xiaobaigang/p/876534.html