二十四.行为型设计模式——Strategy Pattern(策略模式)
2011-12-12 23:00
543 查看
定义
定义一系列算法(algorithms family),将每一个算法封装起来,并让它们可以互相替换(interchangeable)。策略模式让算法独立于使用它的客户而变化。UML类图如下:
View Code
namespace ConsoleApplication { //抽象排序策略类 abstract class SortStrategy { abstract public void Sort(ArrayList list); } //具体策略 快速排序 class QuickSort : SortStrategy { public override void Sort(ArrayList list) { list.Sort(); //ArrayList的Sort默认采用快排 Console.WriteLine("快速排序"); } } //具体策略 外壳排序法 class ShellSort : SortStrategy { public override void Sort(ArrayList list) { //list.ShellSort(); //方法省略 Console.WriteLine("外壳排序法"); } } //具体策略 混合排序 class MergeSort : SortStrategy { public override void Sort(ArrayList list) { //list.MergeSort(); //方法省略 Console.WriteLine("MergeSort"); } } //场景 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) Console.WriteLine("" + name); } } 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.Read(); } } }
优势和缺陷
策略模式提供了替代派生的子类,并定义类的每个行为,剔除了代码中条件的判断语句,使得扩展和结合新的行为变得更容易,根本不需要变动应用程序。策略模式可以避免使用多重条件转移语句,系统变得更新灵活。应用策略模式会产生很多子类,这符合高内聚的责任分配模式。应用情景
下面的情景很适合应用策略模式:1.多个类的分别只是在于行为不同。
2.你需要对行为的算法作很多变动。
3.客户不知道算法要使用的数据。
相关文章推荐
- 设计模式18---设计模式之策略模式(Strategy)(行为型)
- 设计模式--策略模式Strategy(行为型)
- 【行为型模式】策略模式(Strategy)之23种java设计模式
- java-设计模式(行为型)-【策略模式】
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
- 行为型设计模式-策略模式
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- java设计模式之行为型模式-策略模式
- java设计模式(行为型)之策略模式
- 设计模式(4)-行为型-策略模式(Strategy)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式:Strategy 策略模式 -- 行为型
- GoF23种设计模式之行为型模式之策略模式
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 【设计模式】—-(21)策略模式(行为型)
- 设计模式学习之策略模式(Strategy,行为型模式)(13)
- Java与设计模式(二十三)行为型--策略模式
- "围观"设计模式(20)--行为型之策略模式(Strategy Pattern)
- 设计模式(4)-行为型-策略模式(Strategy)