生成器模式(软考uml C++版)

按照软考中级软件设计师中指定的生成器模式uml图,可编写对应的C++代码:

#include<iostream>
#include<vector>
#include<string>
using namespace std;/*创建者模式,又名生成器模式意图:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示
*///产品类
class Product{
public:vector<string> m_partVec;void add(string part){m_partVec.push_back(part);}void show(){for(int i = 0; i < m_partVec.size(); i++){cout<<m_partVec[i]<<endl;}}
};//生成器,纯虚函数,相当于java中的抽象类
class Builder{
public:virtual ~Builder(){}virtual void buildPart() const = 0;
};//具体的生成器,即实现不同的套餐
class Builder1 : public Builder{
private:Product* m_product = new Product();
public:~Builder1(){delete m_product;}void buildPart() const override{m_product->add("partA");}Product* getProduct(){return m_product;}
};//具体的生成器,即实现不同的套餐
class Builder2 : public Builder{
private:Product* m_product = new Product();
public:~Builder2(){delete m_product;}void buildPart() const override{m_product->add("partB");}Product* getProduct(){return m_product;}
};//主管,负责生成不同的套餐
class Director{
private:Builder* m_builder;
public:void setBuilder(Builder* builder){m_builder = builder;}void constrctor(){m_builder->buildPart();}
};int main()
{Director* director = new Director();cout<<"套餐A包含:"<<endl;Builder1* builder1 = new Builder1();director->setBuilder(builder1);director->constrctor();Product* product = builder1->getProduct();product->show();delete product;delete builder1;cout<<"套餐B包含:"<<endl;Builder2* builder2 = new Builder2();director->setBuilder(builder2);director->constrctor();product = builder2->getProduct();product->show();delete product;delete builder2;return 0;
}

执行结果:

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

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

相关文章

中宣部防沉迷系统PHP版本(管局防沉迷验证-PHP-全版本-接口测试样例)

现在对接游戏&#xff0c;无论是登录还是支付都是要去对接防沉迷实名认证接口&#xff0c;但前期的话你要登录网络游戏防沉迷实名认证系统进行接口测试&#xff0c;$appid &#xff0c;$bizId&#xff0c;$key去接口测试页面找&#xff08;正式上线在密钥管理&#xff09;&…

mac输入su命令报错如何重置密码

diannao1xiejiandeMacBook-Air ~ % su Password: su: Sorry输入 sudo passwd 命令重置密码即可。

【数据分析】数据分析介绍

专栏文章索引&#xff1a;【数据分析】专栏文章索引 目录 一、介绍 二、生活中的数据分析 1.无处不在的数据 2.为什么要进行数据分析&#xff1f; 三、数据挖掘案例 1.案例分析 一、介绍 数据采集&#xff1a;数据采集是指从不同来源收集原始数据的过程&#xff0c;包括…

Qt+FFmpeg+opengl从零制作视频播放器-3.解封装

解封装&#xff1a;如下图所示&#xff0c;就是将FLV、MKV、MP4等文件解封装为视频H.264或H.265压缩数据&#xff0c;音频MP3或AAC的压缩数据&#xff0c;下图为常用的基本操作。 ffmpeg使用解封装的基本流程如下&#xff1a; 在使用FFmpeg API之前&#xff0c;需要先注册API&a…

记某次HVV:文件上传打入内网

免责声明 本文仅用于参考和学习交流&#xff0c;对于使用本文所提供的信息所造成的任何直接或间接的后果和损失&#xff0c;使用者需自行承担责任。本文的作者对此不承担任何责任。请在使用本文内容时谨慎评估风险并做出独立判断。谢谢&#xff01; 前言 某次地市hvv发现一个…

2024三轮车行业发展现状

环洋市场咨询&#xff08;Global Info Research&#xff09;的三轮车市场调研报告提供三轮车市场的基本概况&#xff0c;包括定义&#xff0c;分类&#xff0c;应用和产业链结构&#xff0c;同时还讨论发展政策和计划以及制造流程和成本结构&#xff0c;分析三轮车市场的发展现…

Ubuntu系统的安装及基础操作

目录 一、VMware虚拟机安装Ubuntu20.04过程 1、安装前的准备工作 2、VMware虚拟机创建Ubuntu操作系统 步骤一&#xff1a;以管理员的身份运行VMware虚拟机 步骤二&#xff1a;新建虚拟机 步骤三&#xff1a;选择类型配置 步骤四&#xff1a;选择安装客户机操作系统 步骤…

PlayBook 详解

4&#xff09;Playbook 4.1&#xff09;Playbook 介绍 PlayBook 与 ad-hoc 相比&#xff0c;是一种完全不同的运用 Ansible 的方式&#xff0c;类似与 Saltstack 的 state 状态文件。ad-hoc 无法持久使用&#xff0c;PlayBook 可以持久使用。 PlayBook 剧本是 由一个或多个 “…

Jmeter入参问题小记

表单入参的时候&#xff0c;这个地方需要勾选&#xff0c;如果不☑️选的话&#xff0c;会提示errorMsg":"Required String parameter code is not present",

【学习笔记】红队视角下的windows应急响应

1. 上线的方法 exe上线→开360晶核的情况比较困难 2&#xff09;白加黑 接下来的讲解就是基于白加黑上线&#xff0c;看如何应对应急 2. 演示 360环境启动 shell whoami →死 -beacon 如何去查杀 看外联&#xff1a; netstat -ano 提取IP 威胁情报api调用→查是否是恶意…

Redis-复制功能

0 序言 复制功能是Redis提供的多机功能中最基础的一个&#xff0c;这个功能是通过主从复制&#xff08;master-slave replication&#xff09;模式实现的&#xff0c;它允许用户为存储着目标数据库的服务器创建出多个拥有相同数据库副本的服务器&#xff0c;其中存储目标数据库…

使用maven打生产环境可执行包

一、程序为什么要打包 程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包&#xff0c;方便程序的发布和部署。以下是一些打包程序的重要理由&#xff1a; 方便部署和分发&#xff1a;打包后的程序可以作为一个独立的实体&#xff0c;方便…