使用Umbrello学习工厂模式

server/2024/9/18 12:50:01/ 标签: 简单工厂模式, 工厂模式

 工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口, 或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对 象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭” 原则。而工厂模式>简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成工厂模式>简单工厂模式

工厂模式实现步骤

1.提供一个抽象工厂类

:所有具体工厂类的父类

2.提供与产品对应的工厂类:负责实例化产品对象

3.提供一个抽象产品类: 所有产品的父类

4.提供一个或多个产品类:工厂方法模式所创建的具体实例对象

 UML图使用Umbrello绘制

简单工程模式UML图

 配置截图

使用Umbrello可直接生存C++代码

生成代码如下:

自编工程模式测试代码

#include <iostream>
#include <string>using namespace std;/*---------------------------------------------------------------*/
class Operation
{public:virtual double getResult(double numberA, double numberB) = 0;
};/*---------------------------------------------------------------*/
class Add : public Operation
{public:double getResult(double numberA, double numberB){return numberA + numberB;}
};class Sub : public Operation
{public:double getResult(double numberA, double numberB){return numberA - numberB;}
};class Mul : public Operation
{public:double getResult(double numberA, double numberB){return numberA * numberB;}
};/*---------------------------------------------------------------*/
class OperationFactory
{
public:OperationFactory();~OperationFactory();static Operation *createOperation(string operate){Operation *oper = nullptr;if(operate == "+"){oper = new Add;}else if(operate == "-"){oper = new Sub;}else{oper = new Mul;}return oper;}
};/*---------------------------------------------------------------*/
/*---------------------------------------------------------------*/
class AbstractProduct
{
public:virtual void makeProduct() = 0;
};class AbstractFactory
{
public:virtual AbstractProduct* createProduct() = 0;
};class PlaneProduct :public AbstractProduct
{
public:void makeProduct(){cout << "造飞机....." << endl;}
};class PlaneFactory :public AbstractFactory
{
public:AbstractProduct* createProduct(){AbstractProduct* product = new PlaneProduct;return product;}
};class RocketProduct :public AbstractProduct
{
public:void makeProduct(){cout << "造火箭...." << endl;}
};class RocketFactory :public AbstractFactory
{
public :AbstractProduct* createProduct(){AbstractProduct* product = new RocketProduct;return product;}
};int main()
{Operation *add_oper = OperationFactory::createOperation("+");cout << add_oper->getResult(20.5, 30.5) <<endl;Operation *sub_oper = OperationFactory::createOperation("-");Operation *mul_oper = OperationFactory::createOperation("#");cout << sub_oper->getResult(20.5, 30.5) <<endl;cout << mul_oper->getResult(20.5, 30.5) <<endl;//造飞机AbstractFactory* factory = new PlaneFactory;AbstractProduct* product = factory->createProduct();product->makeProduct();//造火箭factory = new RocketFactory;product = factory->createProduct();product->makeProduct();return 0;
}

运行结果:

(完)


http://www.ppmy.cn/server/19464.html

相关文章

Babylon.js 读取GLB模型元数据

如果你熟悉将 3D 资源导出到游戏引擎的过程&#xff0c;那么无疑也会熟悉 3D 资源的 PBR 和 GLB 导出过程。 这是我们之前概述的内容&#xff0c;也是我们交互式工作的所有资产准备的基石。 然而&#xff0c;从传统的管道意义上来说&#xff0c;能够用元数据标记网格有很多逻辑…

展商企业【广东伟创科技开发有限公司】| 2024水科技大会暨技术装备成果展

企业介绍 广东伟创科技开发有限公司成立于2006年&#xff0c;位于广东省江门市。公司是华南理工大学造纸与污染控制国家工程研究中心科技成果转化单位&#xff1b;是华南理工大学产学研合作单位&#xff1b;是广东省高新技术企业&#xff1b;是江门市现代信息服务业重点企业&am…

网络安全实训Day19

网络空间安全实训-渗透测试 XSS攻击 定义 跨站脚本攻击&#xff0c;用户在网页上提交自行构造的恶意JS脚本&#xff0c;使脚本在浏览网页的用户浏览器上执行 XSS与SQL注入的区别 SQL注入攻击的对象是服务器后端 XSS攻击的对象是浏览网站的用户 XSS攻击类型 反射型XSS 是将恶…

【Linux系统化学习】生产者消费者模型(阻塞队列和环形队列)

目录 生产者消费者模型 什么是生产者消费者模型 为什么要使用生产者消费者模型 生产者消费者模型的优点 为什么生产者和生产者要互斥&#xff1f; 为什么消费者和消费者要互斥&#xff1f; 为什么生产者和消费者既是互斥又是同步&#xff1f; 基于BlockingQueue的生产者…

架构师系列-Docker(九)-Swarm集群编排

什么是Swarm Swarm是Docker公司自研发的容器集群管理系统&#xff0c;Swarm在早期是作为一个独立服务存在&#xff0c;在Docker Engine v1.12中集成了Swarm的集群管理&#xff0c;和编排功能&#xff0c;可以通过初始化Swarm或加入现有Swarm来启用Docker引擎的Swarm模式。 Do…

Linux网络编程---多路I/O转接服务器(一)

多路I/O转接服务器 多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是&#xff0c;不再由应用程序自己监视客户端连接&#xff0c;取而代之由内核替应用程序监视文件。 主要使用的方法有三种&#xff1a;select、poll、epoll 一、select多路IO转接 让内核去…

Apache RocketMQ ACL 2.0 全新升级

作者&#xff1a;徒钟 引言 RocketMQ 作为一款流行的分布式消息中间件&#xff0c;被广泛应用于各种大型分布式系统和微服务中&#xff0c;承担着异步通信、系统解耦、削峰填谷和消息通知等重要的角色。随着技术的演进和业务规模的扩大&#xff0c;安全相关的挑战日益突出&am…

前端CSS基础10(浮动)

前端CSS基础10&#xff08;浮动&#xff09; 浮动元素浮动后的特点浮动后的特点浮动后的影响及解决 浮动布局小练习 浮动 CSS中的浮动是一种布局技术&#xff0c;常用于实现元素的排列和定位。通过使用float属性&#xff0c;可以让元素在页面中左浮动或右浮动&#xff0c;使得…

ElasticSearch集群

我们ES集群主要解决的是这两个问题&#xff1a;海量数据存储问题、单点故障问题 海量数据存储问题&#xff1a;单机的ES&#xff0c;数据存储能力是有上限的 单点故障问题&#xff1a;如果单机上的Elasticsearch节点发生故障&#xff0c;整个系统会停止服务&#xff0c;导致数据…

C语言项目实战——扫雷

目录 1.前言 2.完整流程 2.1规划书 2.2代码部分 2.2.1文件的结构设计 2.2.2变量的创建 2.2.3菜单的基本实现 2.2.4初始化期棋盘 2.2.5输出完整棋盘 2.2.6埋雷的实现 2.2.7查询周围雷的数量 2.2.8扫雷的实现 2.2.9完整代码 3.总结 1.前言 哈喽大家好吖&#xff0c;今…

STM32 DAP

STM32 DAP DAP&#xff08;Debug Access Port&#xff09;是一种调试访问端口&#xff0c;通常与调试接口一起使用&#xff0c;例如JTAG或SWD。DAP的作用是提供对目标设备内部的调试、测试和编程访问权限&#xff0c;允许开发人员通过调试工具与目标设备进行通信&#xff0c;并…

机器人系统开发ros2-基础实践01-学会自定义一个机器人动作aciton实体类

您之前在了解操作教程中了解了action 。与其他通信类型及其各自的接口&#xff08;主题/消息和服务/srv&#xff09;一样&#xff0c;您也可以在包中自定义操作。本教程向您展示如何定义和构建可与您将在下一个教程中编写的action服务器和action 客户端一起使用的操作。 需要理…

详解MyBatis配置文件开发与注解式开发

首先呢&#xff0c;五一快来啦&#xff01;提前祝各位宝子们五一玩得开心&#xff0c;然后讲解一下MyBatis框架呀!!! 一.框架介绍 MyBatis 的主要特点 二.MyBatis工作流程 1. 初始化和配置 2. 创建 SqlSessionFactory 3. 获取 SqlSession 4. 映射器绑定 5. 执行操作 6.…

数据输出(进制、小数位,左对齐右对齐

#include <stdio.h> int main() {int a041; printf("%d\n",a);//33printf("%o\n",a);//41 %o输出八进制&#xff0c;开头不加0printf("%x\n",a);//21 %x输出十六进制&#xff0c;开头不加0Xprintf("%#o\n",a);//…

4G+北斗太阳能定位终端:一键报警+倾覆报警 双重保障船舶安全

海上作业环境复杂多变&#xff0c;海上航行充满了各种不确定性和风险&#xff0c;安全事故时有发生&#xff0c;因此海上安全与应急响应一直是渔业和海运行业关注的重点。为了提高海上安全保障水平&#xff0c;4G北斗太阳能定位终端应运而生&#xff0c;它集成了一键报警和倾覆…

网络安全实训Day22

网络空间安全实训-渗透测试 CSRF 定义&#xff1a;跨站伪造请求攻击 攻击者透过诱骗受害者点击攻击者提前构造的恶意链接&#xff0c;从而以受害者的身份向网站服务器发起请求&#xff0c;达到攻击的目的 通过CSRF在网站后台创建管理员 1.搭建创建管理员账号的站点 1.将对方网…

网络基础3

目录 网络层基本概念IP协议头格式网段划分特殊的IP地址IP地址的数量限制运营商的理解全球网络的理解私有IP地址和公网IP地址路由IP层分片与组装数据链路层以太网帧格式以太网通信原理ARP协议ARP数据报的格式DNS域名简介ICMP协议NAT技术NAPT技术代理服务器 网络层基本概念 一个…

ELK日志系统的搭建

文章目录 简介软件准备安装JDK下载Elasticsearch软件修改配置信息创建ElasticSearch运行用户、启动服务添加防火墙策略ElasticSearch-Head插件安装 安装Kibana下载软件包修改配置启动服务 安装Logstash安装包下载安装服务配置修改配置pipeline流水线服务配置文件 启动服务 全流…

深圳杯东三省联赛数学建模挑战赛2024A题

多个火箭残骸的准确定位 绝大多数火箭为多级火箭&#xff0c;下面级火箭或助推器完成既定任务后&#xff0c;通过级间分离装置分离后坠落。在坠落至地面过程中&#xff0c;残骸会产生跨音速音爆。为了快速回收火箭残骸&#xff0c;在残骸理论落区内布置多台震动波监测设备&…

React 之 组件模块依赖

导入&#xff08;Import&#xff09;和导出&#xff08;exporing&#xff09;组件 在一个文件中声明多个组件&#xff0c;但是文件变得太大的话就不方便查看了。要解决此问题&#xff0c;你可以将一个组件放到一个单独的文件中并&#xff08;导出&#xff09; export 组件&…