策略设计模式(strategy):定义算法家族,分别封装起来,让它们之间可以互相替换,让算法变化,不会影响到用户 。
小仙愚钝,用了好长时间没搞懂这句话,直到写出来后才稍微理解了一点。简单来说,简单工厂设计是通过工厂类创建指定对象,而策略设计模式则通过一个context类来使用某些方法(方法名一致)。
策略设计优缺点
GOOD:适合类中的成员以方法为主,算法经常变动;简化了单元测试(因为每个算法都有自己的类,可以通过自己的接口单独测试。
策略模式和简单工厂基本相同,但简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。
BUG:客户端要做出判断
策略设计结构图
代码实现
/*
策略设计和建党工厂的基类与子类基本相同
*/
//基类
class Operation
{
public:
virtual double getResult();
public:
double first;
double second;
};
double Operation::getResult()
{
return 0.0;
}
//子类
class OperationAdd :
public Operation
{
public:
OperationAdd(double a, double b)
{
first = a;
second = b;
}
virtual double getResult();
};
double OperationAdd::getResult()
{
return first + second;
}
//context类,这里是算法的使用
class Context
{
private:
Operation* op;
public:
Context(Operation* opT);
double getRes();
};
Context::Context(Operation* opT)
{
op = opT;
}
double Context::getRes()
{
return op->getResult();
}
//通过客户端来判断使用那种方法
Context* context = nullptr;
double a, b;
char c;
cin >> a >> c >> b;
switch (c)
{
case'+':
context = new Context(new OperationAdd(a, b));
break;
case'-':
context = new Context(new OperationSub(a, b));
break;
default:
break;
}
double res = context->getRes();