设计模式22——行为型模式之策略模式
2014-03-23 23:01
253 查看
定义:策略模式(Strategy Pattern),定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。
类型:对象行为型模式。
概述:
策略模式是比较典型的对象行为型模式,它是将对处理对象的一系列不同算法都单独抽离出来,单独封装成一个个类。策略的出现,主要是为了解决不同算法替换时的逻辑判断,将逻辑判断移到Client中去。策略模式比较常见,但是也相对比较简单。
一系列算法,作为程序员,很容易就想到排序算法。那这里就以排序算法来举例了。有文本内容Context,如果录得的是乱序数据,那么排序最好选择快速排序(Quick
Sort);如果是多部分都有序,只有个别数据随意插入其中,那么此时可以使用选择排序(Select Sort)。
类图:
参与者:
Context,上下文,维护一个指向SortAlgo的指针,用来访问相应的排序算法。
SortAlgo,算法策略接口类,只是提供接口。
QuickSort、SelectSort,按照接口实现具体的算法。
示例代码:
适用性:
多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
在需要新添加其他算法来实现时。
对客户端隐藏具体算法的实现细节。
优缺点:
优点,将判断的逻辑移到类外面,方便通过添加新类来完成新的算法。
缺点,如果算法类过多,会对Client端调用不同算法的判断带来麻烦。
参考资料:
《设计模式——可复用面向对象软件基础》
《大话设计模式》
类型:对象行为型模式。
概述:
策略模式是比较典型的对象行为型模式,它是将对处理对象的一系列不同算法都单独抽离出来,单独封装成一个个类。策略的出现,主要是为了解决不同算法替换时的逻辑判断,将逻辑判断移到Client中去。策略模式比较常见,但是也相对比较简单。
一系列算法,作为程序员,很容易就想到排序算法。那这里就以排序算法来举例了。有文本内容Context,如果录得的是乱序数据,那么排序最好选择快速排序(Quick
Sort);如果是多部分都有序,只有个别数据随意插入其中,那么此时可以使用选择排序(Select Sort)。
类图:
参与者:
Context,上下文,维护一个指向SortAlgo的指针,用来访问相应的排序算法。
SortAlgo,算法策略接口类,只是提供接口。
QuickSort、SelectSort,按照接口实现具体的算法。
示例代码:
using System; using System.Collections.Generic; using System.Text; namespace Pattern22 { // 抽象算法类 abstract class SortAlgo { //算法方法 public abstract void Sort(); } // 快速排序算法 class QuickSort : SortAlgo { // 具体实现快速排序算法 public override void Sort() { Console.WriteLine("快速排序算法实现"); } } // 选择排序算法 class SelectSort : SortAlgo { // 具体实现选择排序算法 public override void Sort() { Console.WriteLine("选择排序算法实现"); } } //上下文 class Context { SortAlgo algo; public Context(SortAlgo _algo) { this.algo = _algo; } //上下文接口 public void SortData() { algo.Sort(); } } class Program { static void Main(string[] args) { Context context; // 当录入的是随机数据时,选择使用快速排序算法 context = new Context(new QuickSort()); context.SortData(); // 当录入一些比较有顺序的数据时,使用选择排序算法 context = new Context(new SelectSort()); context.SortData(); Console.Read(); } } }
适用性:
多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
在需要新添加其他算法来实现时。
对客户端隐藏具体算法的实现细节。
优缺点:
优点,将判断的逻辑移到类外面,方便通过添加新类来完成新的算法。
缺点,如果算法类过多,会对Client端调用不同算法的判断带来麻烦。
参考资料:
《设计模式——可复用面向对象软件基础》
《大话设计模式》
相关文章推荐
- 设计模式22:Strategy 策略模式(行为型模式)
- 设计模式22——行为型模式之策略模式
- "围观"设计模式(31)--行为型设计模式总结(模板、观察者、策略、状态、责任链、命令、访问者、中介者、备忘录、解释器)
- [导入]C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式.zip(6.24 MB)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式18---设计模式之策略模式(Strategy)(行为型)
- JAVA设计模式(22):行为型-解释器模式(Interpreter)
- 设计模式笔记(22)---状态模式(行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 转:设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式---策略模式Strategy(对象行为型)
- 行为型的设计模式-策略模式
- 设计模式笔记 22. Strategy 策略模式(行为型模式)
- 设计模式22---设计模式之解释器模式(Interpreter)(行为型)
- 设计模式--行为型-Strategy(策略)
- java设计模式(行为型)之策略模式
- 设计模式-策略模式---Strategy(对象行为型)
- 设计模式-行为型之策略模式
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)