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

news2024/10/7 8:26:08

构建器提出

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

需求描述

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

构建器模式代码实现

#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;
}

代码执行结果如下:

 

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

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

相关文章

C语言好题解析(一)

目录 选择题1选择题2选择题3选择题4编程题一 选择题1 执行下面程序&#xff0c;正确的输出是&#xff08; &#xff09;int x 5, y 7; void swap() {int z;z x;x y;y z; } int main() {int x 3, y 8;swap();printf("%d,%d\n",x, y);return 0; }A: 5,7 B: …

CSRF

CSRF CSRF&#xff0c;跨站域请求伪造&#xff0c;通常攻击者会伪造一个场景&#xff08;例如一条链接&#xff09;&#xff0c;来诱使用户点击&#xff0c;用户一旦点击&#xff0c;黑客的攻击目的也就达到了&#xff0c;他可以盗用你的身份&#xff0c;以你的名义发送恶意请…

基于深度学习的指针式仪表倾斜校正方法——论文解读

中文论文题目:基于深度学习的指针式仪表倾斜校正方法 英文论文题目&#xff1a;Tilt Correction Method of Pointer Meter Based on Deep Learning 周登科、杨颖、朱杰、王库.基于深度学习的指针式仪表倾斜校正方法[J].计算机辅助设计与图形学学报, 2020, 32(12):9.DOI:10.3724…

web前端开发基础入门html5+css3+js学习笔记(一)

目录 1.第一个前端程序2.前端工具的选择与安装3.VSCode开发者工具快捷键4.HTML5简介与基础骨架4.1 HTML5的DOCTYPE声明4.2 HTML5基本骨架4.2.1 html标签4.2.2 head标签4.2.3 body标签4.2.4 title标签4.2.5 meta标签 5.标签之标题5.1 快捷键5.1 标题标签位置摆放 6.标签之段落、…

商城系统搭建,选择SaaS模式还是源码模式?

当今互联网时代&#xff0c;电子商务已成为商业发展的重要方向之一。搭建一个高效、可靠的商城系统是企业成功的关键之一。然而&#xff0c;在选择商城系统时&#xff0c;很多企业面临一个重要的决策&#xff1a;是选择SaaS&#xff08;软件即服务&#xff09;模式还是购买源码…

无涯教程-Perl - symlink函数

描述 此函数在OLDFILE和NEWFILE之间创建符号链接。在不支持符号链接的系统上,会导致致命错误。 语法 以下是此函数的简单语法- symlink ( OLDFILE, NEWFILE )返回值 如果失败,此函数返回0,如果成功,则返回1。 例 以下是显示其基本用法的示例代码,首先在/tmp目录中创建一…

Leetcode-每日一题【剑指 Offer 32 - II. 从上到下打印二叉树 II】

题目 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果&#xff1a; [ [3], [9,20], [15,7] ] 提示&#xff…

vue3拖拽排序使用Sortable,获取拖拽排序之后的数据

1.安装Sortable npm install sortablejs 2.导入 import Sortable from sortablejs 3.使用 // html<div id"example" class"list-group"><template v-for"(element, index) in 6" :key"index"><div>item{{index …

读完这篇文章,妥妥拿下springboot+jsp+vue+easyui架构项目

概念 Spring Boot是一个快速构建基于Java的Web应用程序的框架。它提供了简化开发流程的特性&#xff0c;如自动配置和内置的嵌入式服务器。 JSP&#xff08;Java Server Pages&#xff09;是一种基于Java的服务器端技术&#xff0c;用于动态生成HTML页面。在Spring Boot中&…

100个网络知识,懂一半绝对高手!

中午好&#xff0c;我的网工朋友。 咱网工找工作的时候&#xff0c;招聘岗位上&#xff0c;都会有好几个大差不差的指标。 比如说&#xff0c;相关专业、啥等级的厂商证书&#xff0c;又或是熟悉网络基础知识等等&#xff0c;对吧。 那这个网络基础知识&#xff0c;就很灵性了…

飞腾架构麒麟V10安装达梦数据库客户端

目录 前言1.下载2.检查安装环境2.1 检查操作系统限制2.2 检查系统内存与存储空间 3.安装4.打开数据库管理工具5.总结 前言 本文主要介绍在飞腾架构麒麟V10桌面系统下如何安装达梦数据库客户端。参照安装手册安装的时候遇到了一些问题特意记录在此&#xff0c;希望能为遇到类似…

ubuntun 18.04设为静态ip(.net模式,可连接外网)

ubuntun 18.04设为静态ip&#xff08;.net模式&#xff0c;可连接外网&#xff09; ubuntun设置 进入到网络配置文件中 sudo vim /etc/netplan/01-network-manager-all.yaml修改配置文件如下 注意制表符&#xff08;格式&#xff09;&#xff0c;其中addresses为要设定的固定…

42个人工智能机器学习数据集推荐

为成功推出人工智能&#xff08;AI&#xff09;项目&#xff0c;许多公司正在转向采用外部数据集。当今时代&#xff0c;寻找数据集比以往任何时候都要容易&#xff0c;数据集对机器学习模型的性能也日益重要。有许多站点都托管数据存储库&#xff0c;涵盖主题广泛&#xff0c;…

Boost开发指南-4.6singleton

singleton singleton即单件模式&#xff0c;实现这种模式的类在程序生命周期里只能有且仅有一个实例。单件模式是一个很有用的创建型模式&#xff0c;有许多实际的应用&#xff0c;并被广泛且深入地研究。 虽然单件模式非常重要&#xff0c;但很遗憾目前Boost中并没有专门的单…

IDA调试安卓应用

先安装好IDA工具 找到需要放到android上的android_server文件 我这里是64位的 # 将android_server64放入到手机/data/local/tmp adb push d:\as /data/local/tmp/as启动android_server 默认的端口是23946, 但我指定了一个新的端口 PC端端口转发 adb forward tcp:23946 tcp:…

django实现文件上传

在django中实现文件上传有三种方法可以实现&#xff1a; 自己手动写使用Form组件使用ModelForm组件 其中使用ModelForm组件实现是最简单的。 1、自己手写 先写一个上传的页面 upload_file.html enctype"multipart/form-data 一定要加这个&#xff0c;不然只会上传文件名…

在Orangepi5开发板3588s使用opencv获取摄像头画面

先感谢香橙派群的管理员耐心指导&#xff0c;经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面 就记录分享一下大概步骤希望大家少踩点坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我用的固件系统是ubuntu2022.0.4 固件是&#x…

【java毕业设计】基于SSM+MySql的个人交友网站设计与实现(程序源码)--个人交友网站

基于SSMMySql的个人交友网站设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于SSMMySql的个人交友网站设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业设计源…

Git 目录详解

一、Git目录详解 在使用Git时&#xff0c;有几个目录和文件在Git项目中扮演着重要的角色&#xff0c;下面详细介绍一下这些目录和文件的作用 1、.git目录 .git目录是Git项目的核心&#xff0c;包含了Git的版本库和元数据等重要信息。在该目录中&#xff0c;有一些重要的子目录和…

Python Web框架:Django、Flask和FastAPI巅峰对决

今天&#xff0c;我们将深入探讨Python Web框架的三巨头&#xff1a;Django、Flask和FastAPI。无论你是Python小白还是老司机&#xff0c;本文都会为你解惑&#xff0c;带你领略这三者的魅力。废话不多说&#xff0c;让我们开始这场终极对比&#xff01; Django&#xff1a;百…