首页 > 其他分享 >设计模式--建造者模式

设计模式--建造者模式

时间:2024-02-05 21:22:59浏览次数:32  
标签:-- 组装 建造 对象 构建 设计模式 指针

建造者模式(Builder Pattern)是一种对象构建设计模式,它提供了一种构建对象的最佳方式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在建造者模式中,一个导演(Director)负责组织各个部分(Builder)的构建步骤,一个抽象构建器(Abstract Builder)定义了各个部分的构建和产品的组装,一个具体构建器(Concrete Builder)实现了抽象构建器所定义的各个构建操作。

下面是一个使用C++实现的简单示例:

复制
#include <iostream>
#include <string>
#include <vector>

// 抽象构建器
class IProduct {
public:
    virtual void show() = 0;
};

// 具体构建器A
class ProductA : public IProduct {
public:
    void show() override {
        std::cout << "ProductA" << std::endl;
    }
};

// 具体构建器B
class ProductB : public IProduct {
public:
    void show() override {
        std::cout << "ProductB" << std::endl;
    }
};

// 抽象建造者
class IBuilder {
public:
    virtual void setPartA() = 0;
    virtual void setPartB() = 0;
    virtual IProduct* getProduct() = 0;
};

// 具体建造者1
class Builder1 : public IBuilder {
private:
    IProduct* product = nullptr;
public:
    void setPartA() override {
        // 实现部分A的构建操作...
        product = new ProductA(); // 创建具体产品A对象
    }
    void setPartB() override {
        // 实现部分B的构建操作...
        product = new ProductB(); // 创建具体产品B对象
    }
    IProduct* getProduct() override {
        return product; // 返回产品对象指针
    }
};

// 具体建造者2
class Builder2 : public IBuilder {
private:
    IProduct* product = nullptr;
public:
    void setPartA() override {
        // 实现部分A的构建操作...
        product = new ProductB(); // 创建具体产品B对象
    }
    void setPartB() override {
        // 实现部分B的构建操作...
        product = new ProductA(); // 创建具体产品A对象
    }
    IProduct* getProduct() override {
        return product; // 返回产品对象指针
    }
};

// 导演类,负责组织各个部分的构建步骤,并返回最终产品对象指针。
class Director {
private:
    IBuilder* builder = nullptr; // 指向当前正在构建的对象的具体建造者对象指针。
public:
    void setBuilder(IBuilder* b) { builder = b; } // 设置当前正在构建的对象的具体建造者对象指针。
    void buildPartA() { builder->setPartA(); } // 执行部分A的构建操作。
    void buildPartB() { builder->setPartB(); } // 执行部分B的构建操作。
    IProduct* getProduct() { return builder->getProduct(); } // 返回最终的产品对象指针。如果当前建造者对象还没有被组装完成,则先调用其组装方法组装完成后再返回产品对象指针。如果当前建造者对象已经被组装完成,则直接返回其产品对象指针。如果当前建造者对象为空,则先调用其组装方法组装完成后再返回产品对象指针。如果当前建造者对象为空且已经被组装完成,则直接返回其产品对象指针。如果当前建造者对象为空且还没有被组装完成,则先调用其组装方法组装完成后再返回产品对象指针。

标签:--,组装,建造,对象,构建,设计模式,指针
From: https://www.cnblogs.com/yubo-guan/p/18008849

相关文章

  • 每日总结
    Scala是ScalableLanguage的简写,是一门多范式的编程语言联邦理工学院洛桑(EPFL)的MartinOdersky于2001年基于Funnel的工作开始设计Scala。Funnel是把函数式编程思想和Petri网相结合的一种编程语言。Odersky先前的工作是GenericJava和javac(SunJava编译器)。Java平台的Scala于......
  • [NOIP2008 提高组] 笨小猴
    [NOIP2008提高组]笨小猴来自洛谷:[https://www.luogu.com.cn/problem/P1125]Openjudge:[http://noi.openjudge.cn/ch0109/06/]普及难度,其实不难。我们先审题.设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数第一行输入字符串,......
  • ChessFunctions+ActiveXControl+SharedAddIn三合一【Office和VBA中呈现中国象棋】
    本软件由三个项目构成,各自下载链接如下:ChessFunctions链接:https://pan.baidu.com/s/11pMnmd28nHtpTGCU9rwNHg提取码:1234ChessFunctions的帮助文件链接:https://pan.baidu.com/s/1uxJYx8gOd8sNEBlda3onnA提取码:1234ActiveXControl链接:https://pan.baidu.com/s/1CTLcXlQgZaD1_av......
  • 闲话2.5
    haosen我曺檷嘜,你他妈咋回家了......
  • EXCEL C# 聚光灯
    C#EXCEL版本聚光灯,开发框架利用EXCELDNA开源库publicstaticclassExtension{staticApplication_xlapp=(Application)ExcelDnaUtil.Application;publicconststringMyConditionRng="$1:$1048576";[ExcelCommand(MenuName="拓展",Menu......
  • power shell 命令 启用 服务 禁用服务
    在PowerShell中,你可以使用以下命令来替代DISM/Online/Cleanup-Image/RestoreHealth:powershellCopyCodeRepair-WindowsImage-Online-ScanHealth这个命令将扫描并修复Windows映像中的任何问题。请确保以管理员身份运行PowerShell以执行这个命令 这些命令用于在Windows......
  • fastapi基础
    一些fastApi的基础运行命令:uvicornmain:app--reload查看接口文档【swagger-ui】:http://127.0.0.1:8000/docs路径后面加/docs......
  • 《程序是怎样跑起来的》第五章,第六章读书感悟
    第五章一,主要内容1,主要介绍了计算机的输入输出设备,包括键盘、鼠标、显示器、打印机、硬盘和网络等,以及它们与计算机主机之间的接口和通信方式。2,介绍了输入输出设备与计算机主机之间的接口和通信方式,包括USB、HDMI、SATA等接口标准,以及中断、DMA等通信方式。二,读书感悟总......
  • 全世界 LoRA 训练脚本,联合起来!
    来自社区的SD-XLDreamboothLoRA微调最佳实践指南太长不看版我们把Replicate在SDXLCog训练器中使用的枢轴微调(PivotalTuning)技术与Kohya训练器中使用的Prodigy优化器相结合,再加上一堆其他优化,一起对SDXL进行DreamboothLoRA微调,取得了非常好的效果。你可以......
  • SharePoint Online 使用Power Apps定制页面
    前言最近,用户有个需求,想要定制一下SharePointOnline的表单,我们就推荐用户使用PowerApps,下面我们就介绍下如何去做。正文1.我们先简单建一个测试列表,比较懒,字段类型我就都选择了单行文本,如下图:2.选择自定义表单,会默认打开PowerApps界面,如下图:3.......