当前位置: 首页 > news >正文

【C++设计模式】用动画片《少年骇客》(Ben10)来解释策略模式

2023年8月25日,周五上午

今天上午学习设计模式中的策略模式时,发现这个有点像很多卡通片里面的变身器...


#include<iostream>//alien hero是外星英雄的意思
//在《少年骇客》中,主角可以通过变身器变成10种外星英雄
class AlienHero{
public://Shapeshift是变身的意思virtual void Shapeshift()=0; 
};//变成超能兽
class Wildmutt:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!超能兽!"<<std::endl;}
};//变成四手霸王
class FourArms:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!四手霸王!"<<std::endl;}
};//变成小奇兵
class GreyMatter:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!小奇兵!"<<std::endl;}
};//变成快闪之星
class Kineceleran:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!快闪之星!"<<std::endl;}
};//主角手上那个手表变身器就叫Omnitrix
class  Omnitrix{AlienHero *ah;
public:Omnitrix(AlienHero *ah){this->ah=ah;}//在手表变身器上选好英雄后,按下手表变身器中间的按钮变身!void push(){ah->Shapeshift();}
};int main(){//变身超能兽!!!Omnitrix omx(new Wildmutt());omx.push();
}


使用策略模式的好处是,

当我需要添加一种新的外星英雄——Upgrade(变形怪)时,

我不需要改动里面的任何代码,只需要基于抽象类AlienHero再添加一个新类Upgrade就可以了。

#include<iostream>//alien hero是外星英雄的意思
//在《少年骇客》中,主角可以通过变身器变成10种外星英雄
class AlienHero{
public://Shapeshift是变身的意思virtual void Shapeshift()=0; 
};//变成超能兽
class Wildmutt:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!超能兽!"<<std::endl;}
};//变成四手霸王
class FourArms:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!四手霸王!"<<std::endl;}
};//变成小奇兵
class GreyMatter:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!小奇兵!"<<std::endl;}
};//变成快闪之星
class Kineceleran:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!快闪之星!"<<std::endl;}
};
//*******************************
//     新添加的类
//********************************
//变成变形怪
class Upgrade:public AlienHero{
public:void Shapeshift(){std::cout<<"变身!变形怪!"<<std::endl;}
};//主角手上那个手表变身器就叫Omnitrix
class  Omnitrix{AlienHero *ah;
public:Omnitrix(AlienHero *ah){this->ah=ah;}//在手表变身器上选好英雄后,按下手表变身器中间的按钮变身!void push(){ah->Shapeshift();}
};int main(){//变身变形怪!!!Omnitrix omx(new Upgrade());omx.push();
}

 

相关文章:

【C++设计模式】用动画片《少年骇客》(Ben10)来解释策略模式

2023年8月25日&#xff0c;周五上午 今天上午学习设计模式中的策略模式时&#xff0c;发现这个有点像很多卡通片里面的变身器... #include<iostream>//alien hero是外星英雄的意思 //在《少年骇客》中&#xff0c;主角可以通过变身器变成10种外星英雄 class AlienHero{ …...

软件测试及数据分析处理实训室建设方案

一 、系统概述 软件测试及数据分析处理是软件开发过程中的一项重要测试活动&#xff0c;旨在验证不同软件模块或组件之间的集成与交互是否正常。综合测试确保各个模块按照设计要求正确地协同工作&#xff0c;以实现整个软件系统的功能和性能。以下是软件测试及数据分析处理的一…...

切换Debian的crontab的nano编辑器

Debian的crontab默认的编辑器是nano&#xff0c;用起来很不习惯,怎么才能转回vim呢? 用以下命令便可&#xff1a; #update-alternatives --config editor 出现以下所示的界面&#xff1a; 而后选择8使用/usr/bin/vim就能够了。 PS&#xff1a;若是你发现你的定时没有生效&…...

Spring Cloud Alibaba-Sentinel--服务容错

1 高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络 原因或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会出…...

Stable Diffusion 系列教程 | 如何获得更高清优质的AI绘画

目录 1 高清修复 1.1 原理 1.2 基本操作 1.3 优缺点 2 UpScale 放大脚本 2.1 原理 2.2 基本操作 2.3 优缺点 3 附加功能放大 3.1 原理 3.2 基本操作 3.3 优缺点 优化出图质量&#xff0c;产出更高清&#xff0c;分辨率更高&#xff0c;更有细节的绘画作品呢&#x…...

食品饮料制造行业如何实现数字化转型和工业4.0

随着科技的不断进步和全球产业的不断发展&#xff0c;食品饮料制造行业也正迎来数字化转型和工业4.0的浪潮。这一转型不仅提升了生产效率和质量&#xff0c;还满足了消费者对更健康、更可持续产品的需求。本文将深入探讨食品饮料制造行业在数字化转型和工业4.0方面的趋势、挑战…...

UE学习记录03----UE5.2 使用MVVM示例

1.打开ue5.2新建C项目 2.项目中通过类导向新建C类&#xff0c;父类选择为UMVVMViewModelBase&#xff0c;创建完成会自动打开vs 3.在VS中对新建的类进行宏定义 使用 C 类向导 创建的类声明自动通过 UCLASS() 宏进行处理。 UCLASS() 宏使得引擎意识到这个类的存在&#xff0c;并…...

代码审计-审计工具介绍-DAST+SAST+IAST项目

DASTSASTIAST项目介绍 DAST&#xff1a; 动态应用程序安全测试&#xff08;Dynamic Application Security Testing&#xff09;技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击&#xff0c;分析应用程序的反应&#xff0c;从而确定该We…...

网络安全应急响应预案培训

应急响应预案的培训是为了更好地应对网络突发状况&#xff0c;实施演 练计划所做的每一项工作&#xff0c;其培训过程主要针对应急预案涉及的相 关内容进行培训学习。做好应急预案的培训工作能使各级人员明确 自身职责&#xff0c;是做好应急响应工作的基础与前提。应急响应…...

STM32F4X 定时器中断

STM32F4X 定时器中断 什么是定时器STM32F4X 定时器分类有关定时器的概念预分频(PSC)自动重装载值(ARR) STM32F4X定时器例程定时器相关函数定时器例程 什么是定时器 定时器(Timer)最基本的功能就是定时&#xff0c;比如定时翻转LED灯&#xff0c;定时向串口发送数据等。除此之外…...

MongoDB +Dataframe+excel透视表

读取MongoDB中的表 from pymongo import MongoClient import pandas as pd client MongoClient(IP地址, 27017)db client[AOI] collection db[表名] #替换为实际的名称 document collection.find({time:{$gte:2023-08-15 15:26:06}})#筛选数据 df pd.DataFrame(list(docu…...

PostgreSQL日期相关

PostgreSQL日期相关 PostgreSQL日期相减得到整数 PostgreSQL日期相减得到整数 天数相减得到整数&#xff0c;执行下面的SQL&#xff1a; select to_number(date_trunc(day,2023-08-18 00:00:00::TIMESTAMP - 2023-08-10 00:00:00::TIMESTAMP INTERVAL 1 day)::text, 9999999…...

C++编程法则365天一天一条(8)const_cast去除cv限定

文章目录 1、使用场景2、关于const_cast的陷阱3、总结const_cast主要用于去除cv限定,且在C++提供的4个类型转换运算符里,只有const_cast可以去除或者添加cv属性。 1、使用场景 用法如下: const_cast< target-type >( expression ) 两个可能是多级指针且指向相同类型…...

某网站DES加密逆向分析实战

文章目录 一、抓包分析二、加密分析一、重写加密 一、抓包分析 分析站点&#xff1a; aHR0cDovL2VpcC5jaGFuZmluZS5jb20v 首先我们提交一下登陆信息&#xff1a; 搜索j_password查看加密函数: 把上图搜索到的encryptPassword函数拿出来分析一下&#xff1a; function encryptP…...

面向对象的理解

想要对象了&#xff1f;没问题&#xff0c;new一个就好了。 但是&#xff0c;new太多对象&#xff0c;对象也会生气的哦。 你瞧&#xff0c;她来了 从两段代码发现端倪 我们来计算一个矩形的面积&#xff0c;看看这两段代码有什么区别呢&#xff1f; 第一段&#xff1a; con…...

java ssl加密发送邮件

通过25端口发送邮件不安全&#xff0c;改为ssl加密方式发送邮件&#xff0c;比较常见的2中实现类发送邮件如下所示。 1、JavaMailSenderImpl 类 使用该实现类发送邮件&#xff0c;ssl加密使用端口号为465&#xff0c;借助Properties类设置ssl的各种配置。 SysUserEntity user…...

SpringBoot-yml配置文件的使用与优势

目录 一、什么是yml配置文件&#xff1f; 二、如何在SpringBoot中使用yml配置文件&#xff1f; 三、如何在SpringBoot中注入yml配置文件的属性&#xff1f; Value注解 ConfigurationProperties注解 四、yml配置文件与properties配置文件的区别和优势 区别 优势 五、总结…...

Layer Normalization(层规范化)

详细内容在这篇论文&#xff1a;Layer Normalization 训练深度神经网络需要大量的计算&#xff0c;减少计算时间的一个有效方法是规范化神经元的活动&#xff0c;例如批量规范化BN&#xff08;batch normalization&#xff09;技术&#xff0c;然而&#xff0c;批量规范化对小批…...

redisson参数配置

文章目录 pom配置链接配置建议 pom <!-- 引入spring-data-redis组件 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 因springboot2.x…...

【基于Arduino的仿生蚂蚁机器人】

【基于Arduino的仿生蚂蚁机器人】 1. 概述2. Arduino六足位移台–蚂蚁机器人3D模型3. 3D 打印零件4. 组装Arduino六足位移台5. Arduino蚂蚁机器人电路图6. 为Arduino Hexapod设计PCB7. 组装电路板8. 系统代码9. Arduino蚂蚁机器人安卓应用程序在本教程中,我将向您展示如何构建…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...