最初版本

enum TaxBase{CN_Tax,US_Tax,DE_Tax};class SalesOrder{TaxBase tax;public:double CalcaulateTax(){if (tax == CN_Tax){}else if (tax == US_Tax){}else if (tax == DE_Tax){}}};

最终版本

class TaxStrategy{public:virtual double Calculate(const Context& contxt) = 0;virtual~TaxStrategy(){}};class CNTax : public TaxStrategy{public:virtual double Calculate(const Context& contxt){}};class USTax : public TaxStrategy{public:virtual double Calculate(const Context& contxt){}};class DETax : public TaxStrategy{public:virtual double Calculate(const Context& contxt){}};class SaleOrder{private:TaxStrategy* strategy;public:SaleOrder(StrategyFactory* strategyfactory){strategy = strategyfactory->NewStrategy;}~SaleOrder(){delete strategy;}double CalculateTax(){Context context;double val = strategy->Calculate();}};