C++设计模式 —— 1. strategy 策略模式

 cover.hpp main.cpp放在同一个文件夹下编译即可

 使用策略模式写的一个汇率转换的例子

拓展非常方便

/*
    cover.hpp
    实现汇率转换的一个接口,由于要使用虚函数动态绑定,因此要写一个共同的基类
*/
class cover_base{
public:
    virtual double chg(double)=0;   //写一个interface,用户必须实现其中的转换接口
    virtual ~cover_base(){}
};


class tool{
public:
    cover_base* cb;     
    //指针用于虚函数动态绑定后续添加的类,其他汇率继承cover_base,重写其chg方法即可,这个cover文件就和算法无关了
    tool(cover_base* ptr):cb(ptr){
        //初始化所需要使用的汇率类
    }
    double chg(double money){
        return cb->chg(money);      
        //ok,调用完毕,至于这个chg怎么实现,我们不关心,实现留给其他的派生类
        //这个文件写好以后,就再也不懂修改了
        //增加新的汇率算法,只需要继承 cover_base 基类,重写chg算法就可以
    }
};
/*
    1.策略模式:
        将算法的实现和接口分开,将算法的实现放在专门的策略类中,每一个策略类实现一个算法。针对抽象策略编程

    eg:
        汇率转换软件
        试以strategy模式来设计一个灵活的汇率转换软件
*/
#include<iostream>
#include"cover.hpp"
using namespace std;
//我们再也不用去修改cover.hpp,只需要继承cover_base并且重写chg方法就可以
class UStoCN : public cover_base{   //实现了美元的汇率算法
public:
    virtual double chg(double money){
        return 7.01*money;  //返回美元-》人民币
    }
};
class FRtoCN : public cover_base{   //实现了英镑的汇率算法
public:
    virtual double chg(double money){
        return money*8.99;      //返回英镑=》人民币
    }
};
int main(){
    //我们现在若是想拓展算法,只用继承-》覆写-》调用,根本不用去改动cover.hpp
    //这就是strategy设计模式的好处
    UStoCN m1;
    FRtoCN m2;
    tool t(&m1);    //动态的指针指向m1对象,调用UStoCN的汇率转换算法
    cout<<t.chg(10)<<"---美元转人民币"<<endl;
    t.cb=&m2;   //动态的指针指向FRtoCN对象,以便调用虚函数
    cout<<t.chg(10)<<"---英镑转人民币"<<endl;
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值