策略模式
<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]