📄 strategyrealworld.cs
字号:
using System;
using System.Windows.Forms;
using System.Collections;
//策略模式(Strategy pattern) -- ATL就是使用Strategy设计模式来实现线程的
//意图
// 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
//适用性
// 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
// 2.需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
// 3.算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
// 4.一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
namespace DesignPattern.StrategyRealWorld
{
class StrategyRealWorld : AbstractPattern
{
public static void Run(TextBox tbInfo)
{
s_tbInfo = tbInfo;
s_tbInfo.Text = "";
// Two contexts following different strategies
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();
// Wait for user
//Console.Read();
}
}
// "Strategy"
abstract class SortStrategy
{
public abstract void Sort(ArrayList list);
}
// "ConcreteStrategy"
class QuickSort : SortStrategy
{
public override void Sort(ArrayList list)
{
list.Sort();
// Default is Quicksort
DesignPattern.FormMain.OutputInfo("QuickSorted list ");
}
}
// "ConcreteStrategy"
class ShellSort : SortStrategy
{
public override void Sort(ArrayList list)
{
//list.ShellSort(); not-implemented
DesignPattern.FormMain.OutputInfo("ShellSorted list ");
}
}
// "ConcreteStrategy"
class MergeSort : SortStrategy
{
public override void Sort(ArrayList list)
{
//list.MergeSort(); not-implemented
DesignPattern.FormMain.OutputInfo("MergeSorted list ");
}
}
// "Context"
class SortedList
{
private ArrayList list = new ArrayList();
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);
// Display results
foreach (string name in list)
{
DesignPattern.FormMain.OutputInfo(" " + name);
}
DesignPattern.FormMain.OutputInfo("");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -