策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
下面的例子以排序算法为例子
1、下面的一种方式是通过,new 出一种具体算法,并传递指针参数(或引用参数,前面有一篇文章中已实现)的一种实现方式
#include <iostream>
using namespace std;
class SortAlgorithm{ //抽象排序算法类
public:
virtual void sort() = 0;
};
class BubbleSort:public SortAlgorithm {//冒泡排序
public:
virtual void sort(){cout<<"bubble sort"<<endl;}
};
class QuickSort:public SortAlgorithm { //快速排序
public:
virtual void sort(){cout<<"QuickSort sort"<<endl;}
};
class Sequence{
public:
Sequence(SortAlgorithm * sortalgorithm){ sa = sortalgorithm;}
void sort(){sa->sort();}
private:
SortAlgorithm * sa;
};
使用
int main(){
SortAlgorithm *sa = new BubbleSort();
Sequence * sq =new Sequence(sa);
sq->sort();
delete sa;
delete sq;
return 1;
}
结果
bubble sort
2、下面的一种方式是通过传递标签,而选定一种具体算法
#include <iostream>
using namespace std;
class SortAlgorithm{ //抽象排序算法类
public:
virtual void sort() = 0;
};
class BubbleSort:public SortAlgorithm {//冒泡排序
public:
virtual void sort(){cout<<"bubble sort"<<endl;}
};
class QuickSort:public SortAlgorithm { //快速排序
public:
virtual void sort(){cout<<"QuickSort sort"<<endl;}
};
enum CTYPE{
BUBBLE,
QUICK,
};
class Sequence{
public:
Sequence(enum CTYPE ct){
if (ct == BUBBLE) {
sa = new BubbleSort();
} else if (ct == QUICK) {
sa = new QuickSort();
} else {
sa = NULL;
}
}
void sort(){sa->sort();}
private:
SortAlgorithm * sa;
};
使用方式
int main(){
//SortAlgorithm *sa = new BubbleSort();
Sequence * sq =new Sequence((CTYPE)QUICK);
sq->sort();
//delete sa;
delete sq;
return 1;
}
结果
QuickSort sort