大话设计模式 第二章 策略模式 C++实现

1 策略模式
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的用户。
2 例程功能
实现超市收银功能,根据不同的收费模式计算金额。
3 设计思路
不同收费模式分别定义为一个抽象基类CashSuper的子类。使用一个上下文类CashContext管理子类的实现。
4 编程环境
win10 64位+Qt 5.3 +MinGW 4.8.2
5 工程结构
class view
6 设计代码

//cashcontext.h
#ifndef CASHCONTEXT_H
#define CASHCONTEXT_H
#include "cashsuper.h"
#include "cashnormal.h"
#include "cashrebate.h"
#include "cashreturn.h"
class CashContext{
public:
    CashContext(char type){
        switch(type){
        case 'N'://正常模式
            pCashSuper=new CashNormal();
            break;
        case 'D'://打折模式
            pCashSuper=new CashRebate(0.8);
            break;
        case 'R'://返现模式
            pCashSuper=new CashReturn(300,100);
            break;
        }
    }
    double GetResult(double money){
        //使用指向子类的基类指针调用虚函数,实现多态!
        return pCashSuper->acceptCash(money);
    }

private:
    CashSuper* pCashSuper;
};

#endif // CASHCONTEXT_H
//main.cpp
#include <iostream>
#include "cashcontext.h"

int main()
{
    CashContext obj_cash_context('D');//打折模式
    std::cout<<"The Price is: "<<obj_cash_context.GetResult(300)<<std::endl;

}

其他类的设计请参见上一篇文章代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值