策略模式c++版本

来源:互联网 发布:魔力宝贝宠物达标数据 编辑:程序博客网 时间:2024/06/10 06:10

这是大话设计模式中的策略模式的c++版本

//策略模式#include <iostream>using namespace std;enum Cash_type{    NORMALL_CASH = 0,    RETURN_CASH = 1,    DISCOUNT = 2,};//虚基类cashsuperclass CashSuper{public:    //打折函数    double virtual acceptCash(double money)=0;    //虚析构函数    virtual ~CashSuper(){};};//正常收费子类class CashNormal :public CashSuper{public:     double acceptCash(double money) override     {         //正常返回         return money;     }};//打折收费类class CashRebate:public CashSuper{public:    //打折收费    CashRebate(double moneyRebate)    {        _moneyReabate = moneyRebate;    }    double acceptCash(double money) override    {        return money * _moneyReabate;    }private:    double _moneyReabate = 0;};//返利收费,超过设定金额,全部的数值就加入返利计算class CashReturn:public CashSuper{public:    CashReturn(double moneyCondition,double moneyReturn)    {        _moneyCondition = moneyCondition;        _moneyReturn = moneyReturn;    }    double acceptCash(double money) override    {        double result = money;        if(money >= _moneyCondition)        {            result = money - (money/_moneyCondition) * _moneyReturn;        }        return result;    }private://返利条件double _moneyCondition = 0; //返利数值double _moneyReturn = 0;};//定义所有支持的算法的公共接口class CashContext{public:    double GetResult(double money)    {        return _cs->acceptCash(money);    }    //将工厂的对象实例化过程转移至此实现与工厂方法的结合    CashContext(Cash_type type)    {        switch(type)        {            case NORMALL_CASH:                _cs = new CashNormal();                break;            case RETURN_CASH:                _cs = new CashReturn(300,100);                break;            case DISCOUNT:                _cs = new CashRebate(0.8);                break;        }    }private:    CashSuper *_cs;};int main(){    double cash = 500;    //获取收费策略    CashContext *csuper = new CashContext(RETURN_CASH);    //将传入金额    cout<<"在现有优惠策略下消费"<<cash<<",实际支付的金额是:"<<csuper->GetResult(cash)<<endl;    return 0;}

测试输出:
在现有优惠策略下消费500,实际支付的金额是:333.333

策略模式优点:
1.减少了算法类与使用算法类的耦合
2.有助于提取出算法中的公共功能
3.简化单元测试
缺点:
改变的成本比较大
转载请注明源地址:http://blog.csdn.net/clh01s

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 山东省植保员证怎么办 工伤没开病假单怎么办 邮储银行怎么办金卡 农机被交警查怎么办 广联达识别板筋负筋重叠怎么办 掌上品的钱怎么办 财务纠纷被起诉怎么办 牙齿补后疼痛怎么办 牙齿表面蛀了怎么办 虫牙全掉了怎么办 牙齿蛀光了怎么办 虫牙全部掉完了怎么办 不喜欢向人请教怎么办 单位不交公积金怎么办 电锯链条掉了怎么办 天津公积金怎么办外地转入 学籍档案涂抹了怎么办 气相点火失败怎么办 小米闹钟声音小怎么办 河北省监理员证怎么办 买的商铺烂尾了怎么办 钢表带被磨花了怎么办 资料员到期了怎么办 八大员挂靠社保怎么办 安许证三类人员不足了怎么办 考试准考证号写错了怎么办 科目一失约两次怎么办 钢筋送检两次不合格怎么办 公路原材料抽检不合格怎么办 混凝土回弹强度不合格怎么办 毕业证照片太丑怎么办 政审时找不到档案怎么办 劳动解除书开不出来怎么办 双流办健康证怎么办 户口本人数满了怎么办 二建有效期到了怎么办 二级建造师到期怎么办 网上选车牌号后怎么办 政府拖欠水利工程款怎么办 重庆造价员到期了怎么办 枕大神经发炎怎么办