《C++20设计模式》策略模式

news2024/9/28 23:35:51

文章目录

  • 一、前言
  • 二、实现
    • 1、UML类图
      • 2、实现

一、前言

策略模式和状态模式实现方式一样,只是目的不同,如果会状态模式的这个也就可以随便看看啦。

相关代码可以在这里,如有帮助给个star!AidenYuanDev/design_patterns_in_modern_Cpp_20

二、实现

1、UML类图

策略模式

2、实现

#include <iostream>
#include <memory>
using namespace std;
enum class Fly_Strategy {
    Fly_With_Wings,
    Fly_No_Way
};

class Fly_Behavior {
public:
    virtual void fly() const = 0;
};

class Fly_With_Wings : public Fly_Behavior{
public:
    void fly() const override {
        cout << "我可以飞" << endl;
    }
};

class Fly_No_Way : public Fly_Behavior {
public:
    void fly() const override {
        cout << "我不会飞" << endl;
    }
};

class Duck {
protected:
    unique_ptr<Fly_Behavior> fly_behavior;
    string name;
public:
    Duck(string name) : name(name) {}
    virtual void show() const = 0;
    void set_fly_strategy(Fly_Strategy strategy) {
        switch (strategy) {
            case Fly_Strategy::Fly_With_Wings:
                fly_behavior = make_unique<Fly_With_Wings>();
                break;
            case Fly_Strategy::Fly_No_Way:
                fly_behavior = make_unique<Fly_No_Way>();
                break;
        }
    }
};

class Duck_Red : public Duck {
public:
    Duck_Red(string name) : Duck(name) {}
    void show() const override {
        cout << "我是红鸭" << name;
        fly_behavior->fly();
    }
};

class Duck_Green : public Duck {
public:
    Duck_Green(string name) : Duck(name) {}
    void show() const override {
        cout << "我是绿鸭" << name;
        fly_behavior->fly();
    }
};


int main(){
    auto duck_red = make_unique<Duck_Red>("小红");
    auto duck_green = make_unique<Duck_Green>("小绿");
    duck_red->set_fly_strategy(Fly_Strategy::Fly_With_Wings);
    duck_green->set_fly_strategy(Fly_Strategy::Fly_No_Way);

    duck_red->show();
    duck_green->show();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1913964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ-六大场景实操指南

RocketMQ-六大场景实操指南 普通消息创建Topic创建Group测试消息收发 定时消息创建Topic创建Group消息发送 事务消息创建Topic创建Group消息收发 顺序消息创建Topic创建Group消息收发 另外两大场景消息异常运维体验感受初次体验给小白新手的建议进阶体验应用场景 关于云消息队列…

Excel第28享:如何新建一个Excel表格

一、背景需求 小姑电话说&#xff1a;要新建一个表格&#xff0c;并实现将几个单元格进行合并的需求。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“XLS工作表”或“XLSX工作表”都可以&#xff0c;如下图所示。 之后&…

持安科技CEO何艺荣获中国信通院2023-2024年度标准卓越贡献奖

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会承办的“全球数字经济大会—云和软件安全论坛”暨“2024第二届SecGo云和软件安全大会”胜利召开&#xff0c;零信任办公安全技术创新企业持安科技创始人兼CEO何艺获评为2023-2024年度零信任领域标准卓越贡献者。 由中…

华盈生物获得美国Akoya认证的PhenoCycler-Fusion(原CODEX)技术服务商

华盈生物获得美国Akoya认证的PhenoCycler-Fusion&#xff08;原CODEX&#xff09;技术服务商 华盈生物获得美国Akoya公司认证的PhenoCycler-Fusion&#xff08;原CODEX&#xff09;空间单细胞蛋白组技术服务商&#xff0c;并进入该技术的全球CRO服务提供者网络&#xff1a;htt…

获超九成Gartner用户力推!FortiGate连续五年斩获“客户之选”称号

近日&#xff0c;Gartner Peer Insights™ 网络防火墙客户之选报告发布&#xff0c;Fortinet 连续第五年荣登这项权威榜单。该评选结果源于广大用户对 Fortinet 防火墙产品的真实反馈&#xff0c;是客户选择 Fortinet 的重要参考依据&#xff0c;也是FortiGate能够占据全球防火…

Spark-RDD和共享变量

概览 每个Spark应用程序都由一个driver program 组成&#xff0c;该驱动程序运行我们编写的main函数&#xff0c;并在集群上执行各种 并行 操作。Spark提供的主要抽象是一个 弹性分布式数据集&#xff08;RDD&#xff09;&#xff0c;它是一个跨集群节点分区的元素集合&#x…

Win-ARM联盟的端侧AI技术分析

Win-ARM联盟&#xff0c;端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC&#xff0c;搭载全新NPU与重塑的Windows 11系统&#xff0c;纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS&#xff0c;支持语音翻译、实时绘画、文…

AI网络爬虫019:搜狗图片的时间戳反爬虫应对策略

文章目录 一、介绍二、输入内容三、输出内容一、介绍 如何批量爬取下载搜狗图片搜索结果页面的图片?以孙允珠这个关键词的搜索结果为例: https://pic.sogou.com/pics? 翻页规律如下: https://pic.sogou.com/napi/pc/searchList?mode=2&start=384&xml_len=48&am…

基于Android平台开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

常见的过压保护芯片、过压保护的基本参数和选型

过压保护也叫过电压保护&#xff0c;是当电压超过预定的最大值时&#xff0c;使电源断开或使受控设备电压降低的一种保护方式。 过压保护芯片是为了防止输入电压的时候浪涌和波纹过大&#xff0c;导致烧坏后面的元器件芯片。因此过压保护芯片是很有必要的芯片。 常见的过压保护…

CentOS7配置阿里云yum源

前提&#xff1a;确认机器可以连接互联网&#xff0c;且系统已经安装了wget软件 先进入到/etc/yum.repos.d目录下查看是否有原来的yum源配置文件&#xff0c;如果有&#xff0c;就将它们备份一下 用yum repolist命令测试&#xff0c;当前系统已经没有可用yum源 输入命令wget -…

护佑未来!引领儿童安全新时代的AI大模型

引领儿童安全新时代的AI大模型 一. 前言1.1 AI在儿童安全方面的潜在作用1.2 实时监控与预警1.3 个性化安全教育与引导1.4 家长监护与安全意识提升 二. AI大模型的优势2.1. 保护儿童隐私和安全的重要性2.2. AI大模型如何应用于儿童安全领域2.1 儿童内容过滤2.2.1 儿童行为监测 2…

案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/140313789 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片…

【Python】已解决:ModuleNotFoundError: No module named ‘pip‘(重新安装pip的两种方式)

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例 四、重新安装pip的两种方式方式一&#xff1a;使用get-pip.py脚本方式二&#xff1a;使用ensurepip模块五、注意事项 已解决&#xff1a;ModuleNotFoundError: No module named ‘pip’&#xff08;重新安装pip的…

无线领夹麦克风哪个牌子好,揭秘降噪领夹麦排行榜内幕!

在当今这个短视频如潮水般涌动的时代&#xff0c;人们的日常生活中掀起了一股新的潮流——用Vlog来捕捉生活的点点滴滴&#xff0c;许多博主在各种短视频和直播平台上开启了他们的副业之旅。这一现象催生了麦克风技术的飞速进步&#xff0c;使其从单一的录音工具转变为拥有多种…

这是什么神仙词典 | 保姆级提示词教学指南,直击内容型提示词撰写精髓!

AI文生图时代&#xff0c;提示词是画面的灵魂&#xff0c;用自然语言把想要展现的内容表述出来&#xff0c;加入不同的描述性词汇&#xff0c;从而使画面更丰富。 内容型提示词&#xff1a; 一般具备较强的叙事性&#xff0c;达到以图叙事&#xff0c;以图传情的效果 01 提…

使用昇腾芯片进行多卡训推时使用hccl_tools.py为npu分配ip报错问题解决办法

目录 问题描述问题产生原因解决办法最终执行并验证参考网站命令扩展 问题描述 昇腾芯片&#xff08;910b/310p等&#xff09;进行多卡训练或者推理时需要先获取并配置每张npu的ip信息&#xff0c;因此需要执行类似下面问题&#xff1a; python mindformers/tools/hccl_tools.…

暑假学习计划怎么做 用待办计划软件安排更科学

暑期来临&#xff0c;无论是学生还是老师&#xff0c;做好暑期计划都至关重要。记得去年暑假&#xff0c;我给自己定下了阅读十本书的目标&#xff0c;却因为缺乏明确的计划&#xff0c;最后只草草读完了两本。而今年&#xff0c;我决定尝试一种新的方式——使用待办计划软件来…

Linux 防火墙配置指南:firewalld不同服务管理的应用案例(十个)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作时间&…

科技创新引领水利行业升级:深入分析智慧水利解决方案的核心价值,展望其在未来水资源管理中的重要地位与作用

目录 引言 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心价值 1. 精准监测与预警 2. 优化资源配置 3. 智能运维管理 4. 公众参与与决策支持 三、智慧水利在未来水资源管理中的重要地位与作用 1. 推动水利行业转型升级 2. 保障国家水安全 3. 促进生态文明建设…