CS106A 发表于 2012-12-29 11:14:20

策略模式

<div class="postcontent"><div id="cnblogs_post_body">在一族算法中,每一个算法都单独进行封装,并且各个算法间可以任意替换。策略模式使这些算法的替换动作独立于正在使用这些算法的代码。
在程序设计中,对象常常会根据用户的需求不同而进行多种不同的操作,或者是对象本身的一些行为(方法)会随用户的要求而改变。
结构图:
http://pic002.cnblogs.com/images/2012/314274/2012071615314358.jpg
Context类代表操作对象;
Strategy类提供算法(操作、行为)族的抽象接口供Context调用
ConcreteStrategyX代表具体的算法(操作、行为)。
具体而言,以一个简单的数据排序情景为例:这里需要选择不同的排序算法,对同一段数据进行排序,可供选择的排序算法有插入排序、快速排序和堆排序。
ArrayData类(Context),是我们需要操作的对象,在其中包含有一个Sort类(Strategy)对象的指针:          
<div class="cnblogs_code"> 1 class ArrayData 2 { 3 public: 4               ArrayData(Sort* s); 5               ~ArrayData(void); 6               void SortArray(){ 7                     _sort->DoSort(_array); 8                 }; 9                 Array _array;10               void SetAlgorithm(Sort* s){11                   _sort = s;12                 }13 14 private:   15             Sort* _sort;16 };
页: [1]
查看完整版本: 策略模式