策略模式

来源:互联网 发布:linux 源码 mysql 编辑:程序博客网 时间:2024/06/13 03:40
#include <iostream>using namespace std;class CashSuper{    public:        virtual double acceptCash(double money) = 0;};class CashNormal: public CashSuper{    public:        double acceptCash(double money)        {            return money;        }};class CashRebate: public CashSuper{    public:        CashRebate(double moneyRebate):m_moneyRebate(moneyRebate){}        double acceptCash(double money)        {            return money * m_moneyRebate;        }    private:        double m_moneyRebate;};class CashReturn: public CashSuper{    public:        CashReturn(double moneyCondition, double moneyReturn):m_moneyCondition(moneyCondition), m_moneyReturn(moneyReturn){}        double acceptCash(double money)        {            double result = money;            if (money >= m_moneyCondition)            {                result = money - (int)(money / m_moneyCondition) * m_moneyReturn;            }            return result;        }        private:        double m_moneyCondition;        double m_moneyReturn;};class CashContext{    public:        CashContext(int type):m_cs(NULL)        {            switch (type)            {                case 1:                    m_cs = new CashNormal;                    break;                case 2:                    m_cs = new CashReturn(300, 100);                    break;                case 3:                    m_cs = new CashRebate(0.8);                    break;            }        }    double GetResult(double money)    {        double result = -1;        if (m_cs)            result = m_cs->acceptCash(money);        return result;    }    private:        CashSuper * m_cs;};int main(){    CashContext cc1(1);    cout << cc1.GetResult(389) << endl;    CashContext cc2(2);    cout << cc2.GetResult(602) << endl;    CashContext cc3(3);    cout << cc3.GetResult(389) << endl;    return 0;}

1 0
原创粉丝点击