定义
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化
UML
适用场景
- 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时;
- 需要安全地封装多种同一类型的操作时;
- 出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体子类时。
代码示例
//策略类
class oper{
public:
virtual int get_result(int, int) = 0;
};
//具体算法实现类:add
class add:public oper{
public:
int get_result(int a, int b){return a+b;}
};
//具体算法实现类:sub
class sub:public oper{
public:
int get_result(int a, int b){return a-b;}
};
//context类
class context1{
oper *op = nullptr;
public:
//传入不同的具体算法实现类
context1(oper *p){
op = p;
}
int get_result(int a, int b){
return op->get_result(a, b);
}
};
//接合简单工厂模式后的context类
class context2{
oper *op = nullptr;
public:
context2(char _op){
switch(_op){
case '+': op = new add; break;
case '-': op = new sub; break;
default: break;
}
}
int get_result(int a, int b){
return op->get_result(a, b);
}
};