.NET策略(Strategy)模式
2011-11-25 21:39
411 查看
目录
定义 UML 参与者 示例定义:
对算法的封装,是算法和责任分离。UML:
代码using System;using System.Collections.Generic;
namespace DoFactory.GangOfFour.Strategy.RealWorld
{
/// <summary>
/// MainApp startup class for Real-World
/// Strategy Design Pattern.
/// </summary>
class MainApp
{
/// <summary>
/// Entry point into console application.
/// </summary>
static void Main()
{
// 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.ReadKey();
}
}
/// <summary>
/// The 'Strategy' abstract class
/// </summary>
abstract class SortStrategy
{
public abstract void Sort(List<string> list);
}
/// <summary>
/// A 'ConcreteStrategy' class
/// </summary>
class QuickSort : SortStrategy
{
public override void Sort(List<string> list)
{
list.Sort(); // Default is Quicksort
Console.WriteLine("QuickSorted list ");
}
}
/// <summary>
/// A 'ConcreteStrategy' class
/// </summary>
class ShellSort : SortStrategy
{
public override void Sort(List<string> list)
{
//list.ShellSort(); not-implemented
Console.WriteLine("ShellSorted list ");
}
}
/// <summary>
/// A 'ConcreteStrategy' class
/// </summary>
class MergeSort : SortStrategy
{
public override void Sort(List<string> list)
{
//list.MergeSort(); not-implemented
Console.WriteLine("MergeSorted list ");
}
}
/// <summary>
/// The 'Context' class
/// </summary>
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();
}
}
}[/code]
Output
QuickSorted list
Anna
Jimmy
Samual
Sandra
Vivek
ShellSorted list
Anna
Jimmy
Samual
Sandra
Vivek
MergeSorted list
Anna
Jimmy
Samual
Sandra
Vivek
相关文章推荐
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
- 设计模式之Strategy(策略)
- Core Design Patterns(13) Strategy 策略模式
- iOS 设计模式之策略模式( Strategy)
- 设计模式学习—Strategy(策略)
- java设计模式(精通系列)-策略模式(Strategy)
- JavaScript设计模式 Item 7 --策略模式Strategy
- 设计模式之C++实现(二)---策略模式(Strategy)
- 策略模式(Strategy)
- 大话设计模式感悟(3)——策略模式(Strategy)
- 双十一来了——策略模式Strategy
- JAVA设计模式—策略模式(Strategy)
- 【行为型模式】策略模式(Strategy)之23种java设计模式
- 设计模式之Strategy(策略)
- 设计模式之策略模式strategy
- C#设计模式系列:策略模式(Strategy)
- 【设计模式】之 Strategy 策略模式