c++的策略模式,就是多态

一、定义:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法独立于使用它的客户而独立变化。
二,核心

抽象策略(抽象基类)(Strategy): 抽象策略类。
具体策略(具体子类)(ConcreteStrategy):封装了继续相关的算法和行为。
环境角色(Context):持有一个策略类的引用,最终给客户端调用。

三,UML类图
在这里插入图片描述
用法示例:

1.空调支持3种模式。冷风模式(coldWind), 热风模式(hotWind),无风模式(noWind)。
1.1当选择coldWind模式,将输送冷风;
1.2当选择hotWind模式,将输送热风;
1.3在选择noWind模式时,空调什么都不做。这里coldWind, hotWind, noWind 其实就是ConcreteStrategy。 myStrategy 是抽象策略类。 所以我们开始这么封装我们策略类

myStrategy.h

#pragma once
#include <iostream>
using namespace std;// 抽象策略角色(Strategy)
//抽象基类写了两个虚函数
class myStrategy
{
public:		myStrategy() { std::cout << "new myStrategy" << endl; };virtual ~myStrategy() { std::cout << "delete myStrategy!" << endl; };virtual void blowWind() = 0;
};//具体策略角色(ConcreteStrategy)
class coldWind: public myStrategy
{
public:coldWind() { std::cout << "new coldWind" << endl; };~coldWind() { std::cout << "delete clod wind!" << endl; };void blowWind(){std::cout << "Blowing clod wind!" << endl;}
};//具体策略角色(ConcreteStrategy)
//继承基类实现热风
class hotWind: public myStrategy
{
public:hotWind() { std::cout << "new hotWind" << endl; };~hotWind() { std::cout << "delete hot wind!" << endl; };void blowWind(){std::cout << "Blowing hot wind!" << endl;}
};
//具体策略角色(ConcreteStrategy)
//继承基类实现无风
class noWind: public myStrategy
{
public:noWind() { std::cout << "new noWind" << endl; };~noWind() { std::cout << "delete no wind!" << endl; };void blowWind(){std::cout << "Blowing no wind!" << endl;}
};

context.h
使用基类指针调用子类的方法

#pragma once//环境角色(Context)
#include "myStrategy.h"class windMode
{
public:windMode(myStrategy* wind);~windMode();void blowWind();void freePtr();	
private://环境角色持有的策略类指针(或引用)myStrategy* m_wind;			
};

context.cpp

#include "context.h"windMode::windMode(myStrategy* wind): m_wind(wind)
{
}windMode::~windMode()
{
}void windMode::blowWind()
{m_wind->blowWind();
}void windMode::freePtr()
{if (m_wind){std::cout << "delete memory" << endl;delete m_wind;m_wind = NULL;}
}

用基类指针调用子类方法
main.cpp

#include <iostream>
#include "windMode.h"
using namespace std;
int main()
{//策略模式使用windMode* hot_Wind = new windMode(new hotWind());windMode* cold_Wind = new windMode(new coldWind());windMode* no_Wind = new windMode(new noWind());hot_Wind->blowWind();cold_Wind->blowWind();no_Wind->blowWind();hot_Wind->freePtr();cold_Wind->freePtr();no_Wind->freePtr();return 0;
}

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

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

相关文章

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力&#xff0c;建立用户专属数据储存区域&#xff0c;使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量&#xff0c;酷开系统除了集成在创维电视上&#xff0c;还服务于飞利…

idea上传项目到gitee(码云)

1、打开码云&#xff0c;新建仓库 2、创建 3、这就是创建成功的页面 4、复制仓库地址&#xff0c;后面需要用到 2、打开我们的项目&#xff1a;例如我现在的项目 1、idea创建git仓库 2、选择我们项目文件夹的目录 3、查看文件是否变色&#xff0c;变色表示成功了 4、添加到缓…

关于WSL2下安装的mysql sever服务,如何在host或外部连接使用的问题

快速提示&#xff1a; 在wsl2下&#xff0c;不允许在外部使用root来登录mysql,所以必须使用非root的帐号来登录 所以&#xff0c;如果明白如何做了&#xff0c;下面的步骤就不必看了。 下面是&#xff0c;给小白用户的教程&#xff1a; 步骤 1: 首先&#xff0c;使用 WSL 命令…

0元实现网站HTTP升级到HTTPS(免费https证书)

HTTPS就是在HTTP的基础上加入了SSL&#xff0c;将一个使用HTTP的网站免费升级到HTTPS主要包括以下几个步骤&#xff1a; 1 获取SSL证书 永久免费的https证书申请通道https://www.joyssl.com/certificate/select/free.html?nid16 免费的SSL证书同样能实现HTTPS&#xff0c;国…

uniapp同步开发h5+小程序双平台踩坑记录

最近做项目的需求是先发布h5&#xff0c;后续再开发上线微信小程序版&#xff0c;自然我选择了uniapp多平台打包&#xff0c;过程中也踩了一些坑。本篇文章记录了使用uniapp开发h5的注意事项&#xff0c;及打包成小程序需要兼容改动的内容。 1.需要在pages.json注册页面路由 在…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务&#xff0c;浏览器期望接受的请求是JSON格式&#xff0c;安卓客户端期望接收的请求是XML格式&#xff0c;这个时候是否需…

C++中的智能指针

C中的智能指针 文章目录 C中的智能指针1.为什么需要智能指针&#xff1f;2.智能指针的类型2.1 std::shared_ptr2.2 std::unique_ptr2.3 std::weak_ptr Reference 笔者在学习ROS2的过程中&#xff0c;遇到了std::make_shared这种用法&#xff0c;一眼看不懂&#xff0c;才发现笔…

vue2使用过滤器实现菜单栏文字动态显示

文章目录 前言一、过滤器filters1.data数据2.beforeCreate 二、菜单栏文字动态显示 前言 左侧菜单栏有缩进&#xff0c;所以不同级别的菜单名可显示的文字数不同。顶部菜单栏是下拉框&#xff0c;所以文字是固定的 一、过滤器filters 由于filters不能使用this为undefined&…

Java 网络编程之TCP(三):基于NIO实现服务端,BIO实现客户端

前面的文章&#xff0c;我们讲述了BIO的概念&#xff0c;以及编程模型&#xff0c;由于BIO中服务器端的一些阻塞的点&#xff0c;导致服务端对于每一个客户端连接&#xff0c;都要开辟一个线程来处理&#xff0c;导致资源浪费&#xff0c;效率低。 为此&#xff0c;Linux 内核…

【CV】opencv特征匹配算法

特征匹配是计算机视觉领域中的一项关键任务&#xff0c;它用于在不同图像中寻找相似的特征点&#xff0c;并将它们进行匹配。这些特征点可以是图像中的角点、边缘、斑点等&#xff0c;在不同的图像中可能因为旋转、缩放、光照变化等因素发生变化。 在OpenCV中&#xff0c;提供…

华为数通HCIA ——企业网络架构以及产品线

一.学习目标&#xff1a;精讲网络技术&#xff0c;可以独立搭建和维护中小企业网络&#xff01; 模拟器&#xff08;华为方向请安装ENSP&#xff0c;Ensp-Lite已有安装包&#xff0c;号称功能更加完善-这意味着要耗费更多的系统资源但是仅对华为内部伙伴申请后方可使用&#x…

VS2022配置和搭建QT

一、下载QT 可以去QT官网下载:https://www.qt.io/product/development-tools。 直接安装。 二、安装qt插件 直接在vs插件市场搜索就行。 安装的时候根据提示&#xff0c;关闭vs自动安装 再次进去vs提示你选择qt版本&#xff0c;psth里边找到安装版本的qmake.exe就行 配…

卡尔曼滤波器(一):卡尔曼滤波器简介

观看MATLAB技术讲座笔记&#xff0c;该技术讲座视频来自bilibili账号&#xff1a;MATLAB中国。 一、什么是卡尔曼滤波器 卡尔曼滤波器是一种优化估计算法&#xff0c;是一种设计最优状态观测器的方法&#xff0c;其功能为&#xff1a; 估算只能被间接测量的变量&#xff1b;通…

https加密证书

网站要出去安全模式访问&#xff0c;加强网络安全就需要使用HTTPS加密证书。 本文主要介绍什么是HTTPS加密证书&#xff0c;如何申请HTTPS加密证书&#xff0c;如何安装HTTPS加密证书等问题展开讨论。 什么是HTTPS加密证书&#xff1f; HTTPS加密证书的行业产品用语叫作SSL证…

互联网大佬座位排排坐:马化腾第一,雷军第二

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这是马化腾、雷军、张朝阳、周鸿祎的座位&#xff0c;我觉得是按照互联网地位排序的。 马化腾坐头把交椅&#xff0c;这个没毛病&#xff0c;有他在的地方&#xff0c;其他几位都得喊声“大哥”。雷军坐第二把交椅…

Go语言常见错误 | 工程组织不合理 (工程结构和包的组织)

编写程序的过程中,组织代码的方式,不仅影响到代码的质量,也决定了团队的协作效率。在使用Golang进行项目开发时,工程组织不合理(包括工程结构和包的组织)是个常见的问题。下文将详述这个问题,并提供改善的方案。 工程结构不合理 Golang项目的工程结构对于代码的模块性…

ApplicationListener监听器

在spring-context 5.3.26中来看一下它的定义&#xff1a; package org.springframework.context;import java.util.EventListener; import java.util.function.Consumer;FunctionalInterface public interface ApplicationListener<E extends ApplicationEvent> extends…

[论文笔记] megatron训练参数:dataloader_type

在深度学习中&#xff0c;dataloader_type参数通常控制着数据的加载、处理和输入到模型的方式。不同的dataloader可能会按照不同的策略处理数据集&#xff0c;这可以显著影响模型训练和评估的效果。具体来说&#xff0c;single和cyclic类型通常如此区别&#xff1a; Single Dat…

关键绩效指标(KPI):明确目标及跟踪进展

在企业管理中&#xff0c;关键绩效指标&#xff08;KPI&#xff09;是一种重要的工具&#xff0c;用于明确目标并跟踪进展。通过设定和监控这些指标&#xff0c;企业能够确保员工、团队和整个组织都朝着既定的目标努力。本文将详细探讨关键绩效指标的重要性、设定方法以及如何有…

缓解工作压力的小窍门:保持健康与创新

目录 1 前言2 工作与休息的平衡3 保持心理健康4 社交与网络建设5 结语 1 前言 作为程序员&#xff0c;我们常常承受着高度的工作压力和持续的创新挑战。为了保持高效和健康&#xff0c;我们需要采取一些方法来缓解工作压力&#xff0c;同时促进个人的心理和身体健康。 2 工作…