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