策略模式+简单工厂

🍇工厂模式
🍈工厂模式向策略模式过度——工厂加一个保安
🍏策略模式
🍐策略模式+简单工厂

声明本文需要理解多态的基础上才能来学习
欢迎前来学习——继承和多态
学习记录

工厂模式

在这里插入图片描述
需要什么就生成什么

// 工厂模式
class Factory
{// 这个是工厂
public:Factory(){puts("Factory");}//virtual void func() = 0;// 不能使用纯虚函数,使用纯虚函数就不能在工厂中创建对象// virtual void func();// 也不能只声明不定义virtual void func(){}
};
class FactoryA :public Factory
{
public:FactoryA(){puts("FactoryaA");}void func(){puts("funcA");}
};
class FactoryB :public Factory
{
public:FactoryB(){puts("FactoryB");}void func(){puts("funcB");}
};int main()
{FactoryA a;a.func();FactoryB b;b.func();return 0;
}

: 看了代码上面的内容之后,我就想问,都要写3个类了,为什么不直接实现成3个毫无关系的类呢,为什么要实现成多态的形式,多麻烦呀

: 话是这么说没错,但是,让他们没有联系,如果有100个类,他们需要进行改动,需要添加一个函数,那么就需要改动100次;而如果使用继承,就可以大大减少工作量

工厂模式向策略模式过度——工厂加一个保安

在这里插入图片描述

class Factory
{// 这个是工厂
public:Factory(){puts("Factory");}//virtual void func() = 0;// 不能使用纯虚函数,使用纯虚函数就不能在工厂中创建对象// virtual void func();// 也不能只声明不定义virtual void func(){}
};
class FactoryA :public Factory
{
public:FactoryA(){puts("FactoryaA");}void func(){puts("funcA");}
};
class FactoryB :public Factory
{
public:FactoryB(){puts("FactoryB");}void func(){puts("funcB");}
};
class Context
{// 这个是将产品给他管理
public:Context(){puts("Context");}// 这里需要实现多态,不同的产品有不同的行为Context(Factory* tem){s = tem;puts("Context");}void Interface(){s->func();}Factory* s;
};

好处就在于使用者就可以忽略多态这个特性直接向平常的函数一样使用就可以了

策略模式

策略模式:在用户使用的时候手动进行判断,判断需要使用哪个产品进行生产
在这里插入图片描述

策略模式+简单工厂

策略模式+工厂模式就是为了解决需要手动判断的问题——降低使用难度,简化使用步骤

具体实现就是将判断的逻辑放到Context内部
在这里插入图片描述

#include<iostream>
using namespace std;// 策略模式+工厂模式
class Strategy
{// 这个是工厂
public:Strategy(){puts("Strategy");}//virtual void func() = 0;// 不能使用纯虚函数,使用纯虚函数就不能在工厂中创建对象// virtual void func();// 也不能只声明不定义virtual void func(){}
};
class StrategyA :public Strategy
{
public:StrategyA(){puts("StrategyA");}void func(){puts("funcA");}
};
class StrategyB :public Strategy
{
public:StrategyB(){puts("StrategyB");}void func(){puts("funcB");}
};
class Context
{// 这个是将产品给他管理
public:Context(){puts("Context");}// 这里需要实现多态,不同的产品有不同的行为//Context(Strategy* tem)//{//	s = tem;//	puts("Context");//}Context(int t){switch (t){case 0:s = new StrategyA;break;case 1:s = new StrategyB;break;}}void Interface(){s->func();}Strategy* s;
};int main()
{Context con(1);con.Interface();return 0;
}

这种方式能让代码更美观

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

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

相关文章

Flink任务如何跑起来之 1.DataStream和Transformation

Flink任务如何跑起来之 1.DataStream和Transformation 1. 滥觞 在使用Flink完成业务功能之余&#xff0c;有必要了解下我们的任务是如何跑起来的。知其然&#xff0c;知其所以然。 既然重点是学习应用程序如何跑起来&#xff0c;那么应用程序的内容不重要&#xff0c;越简单…

好家风短视频:成都鼎茂宏升文化传媒公司

好家风短视频&#xff1a;传承与发扬家庭美德的新载体 在数字时代的浪潮中&#xff0c;短视频以其简短、生动、直观的特点&#xff0c;成为了人们获取信息、传递情感的重要渠道。成都鼎茂宏升文化传媒公司而在这个多元化的内容生态中&#xff0c;好家风短视频以其独特的价值和…

5.透明效果

实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha channel&#xff09;。 当一个物体被渲染到屏幕上时&#xff0c;每个片元除了颜色和深度值之外&#xff0c;它还有另一个属性—透明度。 当透明度为1时&#xff0c;表示该像素是完…

Dvws靶场

文章目录 一、XXE外部实体注入二、No-SQL注入三、Insecure Direct Object Reference四、Mass Assignment五、Information Disclosure六、Command Injection七、SQL注入 一、XXE外部实体注入 访问http://192.168.92.6/dvwsuserservice?wsdl&#xff0c;发现一个SOAP服务。在SO…

MySQL 存储过程(二)

本篇继续介绍MySQL存储过程的相关内容。 目录 一、if语句 二、case 三、循环语句 while loop repeat 一、if语句 在存储过程中&#xff0c;可以使用if语句进行条件判断&#xff0c;其语法结构如下&#xff1a; if 判断语句 then 逻辑语句..... elseif 判断语句 then 逻…

【Linux取经路】初识信号

文章目录 一、人眼中的信号 VS 进程眼中的信号二、ctrlc 终止一个前台进程三、查看信号信息3.1 Core dump——核心转储功能验证 四、信号的处理方式五、ctrlc 被解释成2号信号验证5.1 signal——设置自定义捕捉方法 六、ctrlc 是如何变成信号的&#xff1f;七、异步、软中断八、…

【SQL边干边学系列】04中级问题(续)

文章目录 前言回顾中级问题25.高昂运费26.2015年的高昂运费27.高昂运维 - 使用between28.去年的高昂运费29.库存清单30.没有任何订单的客户31.没有任何订单的客户&#xff0c;员工ID为4 答案25.高昂运费26.2015年的高昂运费27.高昂运维 - 使用between28.去年的高昂运费29.库存清…

CVE-2022-4230

CVE-2022-4230 漏洞介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数&#xff0c;这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下&#xff0c;具有管理选项功能 (admin) 的用户可以使用受影响的功能&#xff0c;但是该插件有一个设置允许低权限用…

DDMA信号处理以及数据处理的流程---DDMA原理介绍

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

vscode设置代码自动换行显示

☆ 问题描述 vscode设置代码自动换行显示 ★ 解决方案 ✅ 总结

每日两题 / 198. 打家劫舍 74. 搜索二维矩阵(LeetCode热题100)

198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; dp[i]表示考虑前i 1号房屋&#xff0c;能获取的最大金额。对于没一间房屋都有偷与不偷两种选择 如果偷&#xff0c;需要从dp[i - 2]转移&#xff0c;因为不能偷窃相邻房屋&#xff0c;dp[i] dp[i - 2] nums[i] 如果…

稍微学学react

文章开始前&#xff0c;先划划水~ 今日份开心&#xff1a; 今天看之前发布的按钮npm包下载量有162次&#xff0c;早知道好好做了 今日份不开心&#xff1a; 爬岗位看到一个整体都挺满意的岗位&#xff0c;公司位置和发展大方向都好喜欢&#xff01;&#xff01;&#xff01;…

【PL理论】(6) F#:标准库之列表(List)

​​​​​ &#x1f4ad; 写在前面&#xff1a;本章我们将介绍 F# 标准库的列表&#xff0c;我们将简单的先过一遍列表的一些常用操作&#xff0c;具体的讲解我们将放在后续章节。 目录 0x00 标准库&#xff1a;列表&#xff08;List&#xff09; 0x01 模式匹配与列表 0x…

14.8k Star!CrewAI:部署一支由你指挥的人工智能代理大军,股票分析、发布帖子、支持Ollama!

原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; 14.8k Star&#xff01;CrewAI&#xff1a;部署一支由你指挥的人工智能代理大军&#xff0c;股票分析、发布帖子、支持Ollama&#xff01;…

计算机组成结构—多处理器

目录 一、SISD、SIMD、MIMD 和向量处理器 1. 费林分类法 2. SIMD 和向量处理器 二、硬件多线程 三、多核处理器和 SMP 1. 多核处理器 2. 共享内存多处理器&#xff08;SMP&#xff09; 3. MPP 和集群 一、SISD、SIMD、MIMD 和向量处理器 通过改进系统结构&#xff0c;可…

C++设计模式-外观模式,游戏引擎管理多个子系统,反汇编

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 30. 外观模式 为子系统定义一组统一的接口&#xff0c;这个高级接口会让子系统更容易被使用。应用&#xff1a;如在游戏开发中&#xff0c;游戏引擎包含多个子系统&#xff0c;如物理、渲染、粒子、UI、音频等。可以使用外观…

图像算法---自动曝光AE

一&#xff0c;自动曝光AE 自动曝光&#xff08;AE&#xff0c;全称Auto Exposure&#xff09;是一种在摄影和摄像中广泛使用的技术&#xff0c;它允许相机或摄像机根据环境光线条件自动调整曝光参数&#xff0c;以获得清晰、亮度适中的图像或视频。以下是关于自动曝光AE的详细…

31|HTTP3:甩掉TCP、TLS 的包袱,构建高效网络

前面两篇文章我们分析了HTTP/1和HTTP/2&#xff0c;在HTTP/2出现之前&#xff0c;开发者需要采取很多变通的方式来解决HTTP/1所存在的问题&#xff0c;不过HTTP/2在2018年就开始得到了大规模的应用&#xff0c;HTTP/1中存在的一大堆缺陷都得到了解决。 HTTP/2的一个核心特性是…

优卡集团冲刺港股上市:90后创始团队孵化,IPO前突击大额分红

现年26岁的鲁圳&#xff0c;正在带领其6年以来的创业成果冲击资本市场。 近日&#xff0c;金融居间机构服务商优卡集团&#xff08;Yoc Group&#xff09;向港交所递交上市申请&#xff0c;民银资本为其独家保荐人。透过招股书可知&#xff0c;优卡集团成立于2018年&#xff0…

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传 文章目录 文件上传What is Upload-File&#xff1f;Upload-File In CTFWeb151考点&#xff1a;前端校验解题&#xff1a; Web152考点&#xff1a;后端校验要严密解题&#xff1a; Web153考点&#xff1a;后端校验 配置文件介绍解题&#xff1a; Web154考点&#xff1a…