全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++如何实现策略模式 c++设计模式之Strategy【实例】

策略模式通过定义统一策略接口并由具体策略类实现,使上下文可在运行时动态切换算法,避免条件分支,提升扩展性与可维护性。

策略模式在C++中通过定义一组可互换的算法类,让它们实现统一接口,再由上下文(Context)在运行时动态选择具体策略。核心是“面向接口编程”,避免大量条件分支,提升扩展性和可维护性。

定义策略接口(Strategy)

使用纯虚函数声明算法行为,所有具体策略都继承并实现它:

// Strategy.h
class PaymentStrategy {
public:
    virtual ~PaymentStrategy() = default;
    virtual void pay(double amount) const = 0;
};

实现多个具体策略(ConcreteStrategy)

每个策略封装一种独立的支付逻辑,彼此解耦:

// AlipayStrategy.h
class AlipayStrategy : public PaymentStrategy {
public:
    void pay(double amount) const override {
        std::cout     }
};

// WechatPayStrategy.h
class WechatPayStrategy : public PaymentStrategy {
public:
    void pay(double amount) const override {
        std::cout     }
};

设计上下文(Context)持有并调用策略

Context不关心具体实现,只依赖Strategy接口;支持运行时切换策略:

// Order.h
class Order {
private:
    const PaymentStrategy* strategy_;
public:
    Order(const PaymentStrategy* s) : strategy_(s) {}
    void setStrategy(const PaymentStrategy* s) { strategy_ = s; }
    void checkout(double total) const {
        if (strategy_) strategy_->pay(total);
        else std::cout     }
};

客户端使用示例

策略对象可栈上创建、智能指针管理或工厂生成,灵活组合:

// main.cpp
int main() {
    AlipayStrategy alipay;
    WechatPayStrategy wechat;

    Order order(&alipay);
    order.checkout(199.9);  // 输出:支付宝支付 199.9 元

    order.setStrategy(&wechat);
    order.checkout(299.0);  // 输出:微信支付 299 元

    return 0;
}

策略模式让算法变化独立于使用它的逻辑,新增支付方式只需加一个类+一行注册,无需修改Order或其他已有代码。配合std::unique_ptr或策略工厂,还能进一步支持延迟创建和配置驱动。


# c++  # 封装  # const  # double  # void  # 继承  # 虚函数  # 纯虚函数  # 接口  # public  # default  # 算法  # 多个  # 还能  # 已有  # 只需  # 可在  # 或其他  # 并由  # 支付宝  # 支付方式  # 再由 


相关文章: 湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何在VPS电脑上快速搭建网站?  视频网站制作教程,怎么样制作优酷网的小视频?  临沂网站制作公司有哪些,临沂第四中学官网?  高端建站如何打造兼具美学与转化的品牌官网?  建站上市公司网站建设方案与SEO优化服务定制指南  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  建站之星多图banner生成与模板自定义指南  建站之星后台密码遗忘?如何快速找回?  如何在腾讯云免费申请建站?  如何通过西部建站助手安装IIS服务器?  香港网站服务器数量如何影响SEO优化效果?  西安专业网站制作公司有哪些,陕西省建行官方网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  红河网站制作公司,红河事业单位身份证如何上传?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  江苏网站制作公司有哪些,江苏书法考级官方网站?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  招贴海报怎么做,什么是海报招贴?  如何用y主机助手快速搭建网站?  如何在云主机快速搭建网站站点?  建站主机选虚拟主机还是云服务器更好?  建站主机系统SEO优化与智能配置核心关键词操作指南  如何破解联通资金短缺导致的基站建设难题?  定制建站流程解析:需求评估与SEO优化功能开发指南  公司门户网站制作流程,华为官网怎么做?  建站主机选购指南:核心配置与性价比推荐解析  C++用Dijkstra(迪杰斯特拉)算法求最短路径  详解jQuery停止动画——stop()方法的使用  建站之星如何实现PC+手机+微信网站五合一建站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站之星如何快速更换网站模板?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  网站制作新手教程,新手建设一个网站需要注意些什么?  广平建站公司哪家专业可靠?如何选择?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  头像制作网站在线制作软件,dw网页背景图像怎么设置?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  动图在线制作网站有哪些,滑动动图图集怎么做?  定制建站策划方案_专业建站与网站建设方案一站式指南  建站主机SSH密钥生成步骤及常见问题解答?  Android自定义控件实现温度旋转按钮效果  公司网站设计制作厂家,怎么创建自己的一个网站?  如何在新浪SAE免费搭建个人博客? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。