设计模式之构建器(Builder)C++实现

1、构建器提出

在软件功能开发中,有时面临“一个复杂对象”的创建工作,该对象的每个功能接口由于需求的变化,会使每个功能接口发生变化,但是该对象使用每个功能实现一个接口的流程是稳定的。构建器就是解决该类现象的。构建就是定义一个抽象类,然后将变化的每个功能接口定义为虚函数,稳定的流程定义为函数接口;其他有变化的类继承该抽象类。

2、需求描述

有一个产品需要经过设计、制作、包括、出售这几个步骤,才可以完成整个功能。每个产品都会有这几个步骤,但每个产品对应的具体细节是不一样的。

3、构建器模式代码实现

#include <iostream>
class Product
{
public:
    void ProdctFinshed()
    {
        this->Design1();
        this->Make2();
        this->Package3();
        this->Sale4();
    }
    virtual ~Product(){};
protected:
    virtual void Design1()=0;
    virtual void Make2()=0;
    virtual void Package3()=0;
    virtual void Sale4()=0;
};

class ProductA:public Product
{
protected:
    virtual void Design1(){
        std::cout << "ProductA Design1 "<< std::endl;
    };
    virtual void Make2(){
        std::cout << "ProductA Make2 "<< std::endl;
    };
    virtual void Package3(){
        std::cout << "ProductA Package3 "<< std::endl;
    };
    virtual void Sale4(){
        std::cout << "ProductA Sale4 "<< std::endl;
    };
    ~ProductA(){};
};

class ProductB:public Product
{
protected:
    virtual void Design1(){
        std::cout << "ProductB Design1 "<< std::endl;
    };
    virtual void Make2(){
        std::cout << "ProductB Make2 "<< std::endl;
    };
    virtual void Package3(){
        std::cout << "ProductB Package3 "<< std::endl;
    };
    virtual void Sale4(){
        std::cout << "ProductB Sale4 "<< std::endl;
    };
    ~ProductB(){};
};

int main()
{
    Product *pA = new ProductA();
    pA->ProdctFinshed();
    Product *pB = new ProductB();
    pB->ProdctFinshed();

    delete pA;
    pA = nullptr;
    delete pB;
    pB = nullptr;
    return 0;
}

代码执行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java课题笔记~ ServletContext

单个Servlet的配置对象 web.xml <servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class><init-param><param-name>charset</param-name><param-value>utf-8&…

内网搭建电影网站的实现和进行公网访问

如何实现内网搭建电影网站并进行公网访问 文章目录 如何实现内网搭建电影网站并进行公网访问前言1. 把软件分别安装到本地电脑上1.1 打开PHPStudy软件&#xff0c;安装一系列电影网站所需的支持软件1.2 设置MacCNS10的运行环境1.3 进入电影网页的安装程序1.4 对运行环境进行检测…

css3新增选择器总结

目录 一、属性选择器 二、结构伪类选择器 三、伪元素选择器 四、UI状态伪类选择器 五、反选伪类选择器 六、target选择器 七、父亲选择器、后代选择器 八、相邻兄弟选择器、兄弟们选择器 一、属性选择器 &#xff08;除IE6外的大部分浏览器支持&#xff09; E&#…

WebRTC音视频通话-实现iOS端调用ossrs视频通话服务

WebRTC音视频通话-实现iOS端调用ossrs视频通话服务 之前搭建ossrs服务&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 这里iOS端使用GoogleWebRTC联调ossrs实现视频通话功能。 一、iOS端调用ossrs视频通话效果图 iOS端端效果图…

【Java 回忆录】Java全栈开发笔记文档

这里能学到什么&#xff1f; 实战代码文档一比一记录实战问题和解决方案涉及前端、后端、服务器、运维、测试各方面通过各方面的文档与代码&#xff0c;封装一套低代码开发平台直接开腾讯会议&#xff0c;实实在线一起分享技术问题核心以 Spring Boot 作为基础框架进行整合后期…

【爱书不爱输的程序猿】公网访问本地搭建的WEB服务器之详细教程

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本地电脑搭建Web服务器并用cpolar发布至公网访问 前言1. 首先将PHPStudy、WordPress、cpolar下载到电脑2. 安装PHPStudy3. 安装cpolar&#xff0c;进入Web-UI界面4.安装wordpress5.…

C语言好题解析(二)

目录 递归类型例题1例题2例题3例题4例题5例题6 递归类型 例题1 根据下面递归函数&#xff1a;调用函数Fun(2)&#xff0c;返回值是多少&#xff08; &#xff09;int Fun(int n) {if (n 5)return 2;elsereturn 2 * Fun(n 1); } A.2 B.4 C.8 D.16【答案】 D 【分析】 …

vs code 环境变量的配置

问题 环境变量中重复出现下面这两项 ..:/home/xxx/.local/bin/:/home/xxx/.local/bin/:...这造成了一些环境污染&#xff0c;因为/home/xxx/.local/bin 这个环境变量放在前面&#xff0c;文件夹里面的可执行的文件会比conda环境更加优先地执行。 解决 先说结论&#xff0c;…

Postman的高级用法—Runner的使用​

1.首先在postman新建要批量运行的接口文件夹&#xff0c;新建一个接口&#xff0c;并设置好全局变量。 2.然后在Test里面设置好要断言的方法 如&#xff1a; tests["Status code is 200"] responseCode.code 200; tests["Response time is less than 10000…

【Git】—— 标签管理

目录 &#xff08;一&#xff09;理解标签 1、作用 &#xff08;二&#xff09;创建标签 &#xff08;三&#xff09;操作标签 1、删除标签 2、推送标签 3、删除远程标签 &#xff08;一&#xff09;理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的…

JavaWeb 速通 EL 和 JSTL

目录 一、EL表达式 1.快速入门 : 1.1 基本介绍 1.2 入门案例 2.常用输出形式 : 2.1 创建JavaBean类 2.2 创建JSP文件 3.empty运算符 : 3.1 介绍 3.2 实例 4.EL对象 : 4.1 EL11个内置对象 4.2 域对象演示 4.3获取HTTP信息 二、JSTL标签库 1.基本介绍 : 2.core核心库常用标…

corosync+pacemaker+nfs配置简单高可用

环境准备&#xff1a; 每个节点提供20G共享存储 web1192.168.134.176node7web2192.168.134.177node8 一、准备web环境&#xff08;两台web测试机都要准备&#xff09; yum install httpd -y echo " web test page ,ip is hostname -I." > /var/www/html/index…

【QT+ffmpeg】QT+ffmpeg 环境搭建

1.qt下载地址 download.qt.io/archive/ 2. win10sdk 下载 https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 安装 debug工具路径 qtcreater会自动识别 调试器选择

OpenAI全球招外包大军,手把手训练ChatGPT取代码农 ; 码农:我自己「杀」自己

目录 前言 OpenAI招了一千多名外包人员&#xff0c;训练AI学会像人类一样一步步思考。如果ChatGPT「学成归来」&#xff0c;码农恐怕真的危了&#xff1f; 码农真的危了&#xff01; 当时OpenAI也说&#xff0c;ChatGPT最合适的定位&#xff0c;应该是编码辅助工具。 用Cha…

【学会动态规划】等差数列划分(22)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

easyx图形库基础:2.基本运动+键盘交互

基本运动键盘交互 一.基本运动1.基本运动&#xff1a;1.如何实现动画&#xff1a;2.实现一个小球从左到右从右到左&#xff1a;&#xff08;往返运动&#xff09;3.实现一个五角星的移动&#xff1a;4.实现一个五角星自转和圆周运动的集合&#xff1a;&#xff08;圆周运动&…

Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

效果图◕‿◕&#xff1a;opencv人脸识别效果图(请叫我真爱粉)✌✌✌先看一下效果图勾起你的兴趣&#xff01; 文章目录&#xff1a; 一&#xff1a;环境配置搭建 二&#xff1a;图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h t…

java八股文面试[java基础]——String StringBuilder StringBuffer

String类型定义&#xff1a; final String 不可以继承 final char [] 不可以修改 String不可变的好处&#xff1a; hash值只需要算一次&#xff0c;当String作为map的key时&#xff0c; 不需要考虑hash改变 天然的线程安全 知识来源&#xff1a; 【基础】String、StringB…

latex 笔记:cs论文需要的排版格式

主要针对英文文献 1 基本环境 连字符 不同长度的"-"表示不同含义。 一个"-"长度的连字符用于词中两个"-"长度的连字符常用于制定范围三个"-"长度的连字符是破折号数学中的负数要用数学环境下的-得到 强调 在正式文章中, 通常不…

探索区块链世界:去中心化应用(DApp)的崭新前景

随着科技的不断发展&#xff0c;区块链技术逐渐引领着数字时代的潮流。在这个充满创新和变革的领域中&#xff0c;去中心化应用&#xff08;DApp&#xff09;成为了备受瞩目的焦点。DApp 不仅改变了传统应用程序的范式&#xff0c;还在金融、社交、游戏等多个领域展现出了广阔的…