1 框架
2 定义
定义: 策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。
优点:
扩展性良好,算法可以自由切换
3 CODE
3.1优化之前
// 优化之前
enum Area
{
CN,
USA
//...
};
class SalesOrderPre
{
public:
SalesOrderPre(Area area)
{
m_area = area;
}
double caculateTax()
{
if(m_area == Area::CN)
{
//***
}
else if (m_area == Area::USA)
{
//****
}
}
private:
Area m_area;
};
3.2优化之后
class TaxStrategy
{
public:
virtual double caculate() = 0;
virtual ~TaxStrategy() = default;
};
class TaxStrategyCN : public TaxStrategy
{
public:
virtual double caculate() override
{
cout << "CN tax" << endl;
return 0.0;
}
};
class TaxStrategyUSA : public TaxStrategy
{
public:
virtual double caculate() override
{
cout << "USA tax" << endl;
return 0.0;
}
};
class SalesOrder
{
public:
SalesOrder(TaxStrategy* taxStrategy) // 后续可通过工厂传入合适的税策略
{
m_taxStrategy = taxStrategy;
}
~SalesOrder()
{
delete m_taxStrategy;
}
public:
double caculateTax()
{
return m_taxStrategy->caculate();
}
private:
TaxStrategy* m_taxStrategy = nullptr;
};