设计模式-策略模式(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();