enum TaxBase {
CN_Tax,
US_Tax,
DE_Tax,
};
class SaleOrder {
TaxBase tax;
public:
if(tax == CN_Tax) {
//....
}
else if (tax == US_Tax) {
//....
}
else if (tax == DE_Tax)
{
//....
}
//.......
};
//如果加个法国税款,则需改写枚举类型,改写类内方法,打破了类的复用性 绝对不变的可以用if else,如果场景或者业务变换
class TaxStrategy {
public:
virtual double Calculate(const Context& context)=0;
virtual ~TaxStrategy() {}
};
class CNTax :public TaxStrategy {
public:
virtual double Calculate(Context& context)
{
//......
}
};
class USTax :public TaxStrategy {
public:
virtual double Calculate(Context& context) {
//...
}
};
class DETax :public TaxStrategy {
public:
virtual double Calculate(Context& context) {
//....
}
};
class SaleOrder {
TaxStrategy *strategy;
public:
SaleOrder(StrategyFactory* strategy) { //不知道是哪国税款,工厂模式未学
this->strategy = strategyFactory->NewStrategy();
}
~SaleOrder() {
delete this->strategy;
}
public:
double CalculateTax() {
Context context();
double val = strategy->Calculate(context);
//....
}
};
//假如加个法国税款 只需扩展一个类
class FRTax :public TaxStrategy {
public:
virtual double Calculate(Context& context) {
//....
}
};
红圈圈起来是指稳定不变的 左边中的Contex相当于saleorder.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)