策略(Strategy)模式
生活随笔
收集整理的這篇文章主要介紹了
策略(Strategy)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
* 環境(Context)角色:持有一個Strategy類的引用。
* 抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。
* 具體策略(ConcreteStrategy)角色:包裝了相關的算法或行為。
*/
/// <summary>
/// 策略(Strategy)模式
/// </summary>
class Program
{
static void Main(string[] args)
{
SortedList studentRecords = new SortedList();
studentRecords.Add("Samual");
studentRecords.Add("Jimmy");
studentRecords.Add("Sandra");
studentRecords.Add("Anna");
studentRecords.Add("Vivek");
studentRecords.SetSortStrategy(new QuickSort());
studentRecords.Sort();
studentRecords.Display();
Console.ReadLine();
}
}
// 抽象策略(Strategy)角色
public abstract class SortStrategy
{
abstract public void Sort(ArrayList list);
}
public class QuickSort : SortStrategy
{
// Methods
public override void Sort(ArrayList list)
{
list.Sort(); // Default is Quicksort
Console.WriteLine("QuickSorted list ");
}
}
public class ShellSort : SortStrategy
{
public override void Sort(ArrayList list)
{
Console.WriteLine("ShellSorted list ");
}
}
public class MergeSort : SortStrategy
{
public override void Sort(ArrayList list)
{
//list.MergeSort();
Console.WriteLine("MergeSorted list ");
}
}
public class SortedList
{
// Fields
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)
Console.WriteLine(" " + name);
}
}
可以看出 策略模式的定義 非常類似 簡單工廠。
同樣是 實現一個基類 只是他們的 工廠 不一樣
在策略模式中 環境(Context)角色 是根據不同的子類 通過構造函數來實例化, 來判斷實現那個 子類函數。
那么看看他們結合起來會有什么效果呢
static void Main(string[] args)
{
//結合 簡單工廠
SortedList sotreContent = new SortedList("1");
ArrayList list=new ArrayList();
list.Add("1");
sotreContent.GetResult(list);
Console.ReadLine();
}
/// <summary>
/// 環境(Context)角色 修改如下
/// </summary>
public class SortedList
{
SortStrategy Strategy = null;
public SortedList(string type)
{
switch (type)
{
case "1":
QuickSort quickSort = new QuickSort();
Strategy = quickSort;
break;
case "2":
break;
}
}
public void GetResult(ArrayList list)
{
Strategy.Sort(list);
}
}
總結
以上是生活随笔為你收集整理的策略(Strategy)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS逆向工程之Reveal工具的安装、
- 下一篇: 对称密钥