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等。