当前位置: 首页 > news >正文

23种设计模式 - 建造者模式

模式定义

建造者模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。其核心思想是分步骤构建复杂对象,并通过统一的接口控制构建流程,适用于需要灵活组合复杂组件且构建顺序稳定的场景(如数控系统的多模块配置)。


模式结构

产品(Product):最终要构建的复杂对象(如数控系统),包含多个组件(控制器、传感器等)。
抽象建造者(Builder):定义构建产品各个部件的接口(如buildController()buildSensor())。
具体建造者(Concrete Builder):实现抽象建造者接口,提供具体组件的实现(如西门子、发那科数控系统建造器)。
指挥者(Director):控制构建流程,按顺序调用建造者的方法生成完整产品。


C++示例(数控系统场景)

#include 
#include 

// 产品类:数控系统
class CNCSystem {
public:
    void setController(const std::string& controller) {
        controller_ = controller;
    }
    void setSensor(const std::string& sensor) {
        sensor_ = sensor;
    }
    void setDriver(const std::string& driver) {
        driver_ = driver;
    }
    void showConfig() {
        std::cout << "数控系统配置:\n"
                  << "- 控制器: " << controller_ << "\n"
                  << "- 传感器: " << sensor_ << "\n"
                  << "- 驱动模块: " << driver_ << "\n";
    }
private:
    std::string controller_;
    std::string sensor_;
    std::string driver_;
};

// 抽象建造者
class CNCBuilder {
public:
    virtual ~CNCBuilder() = default;
    virtual void buildController() = 0;
    virtual void buildSensor() = 0;
    virtual void buildDriver() = 0;
    virtual CNCSystem getResult() = 0;
};

// 具体建造者:西门子系统
class SiemensBuilder : public CNCBuilder {
public:
    SiemensBuilder() { system_ = CNCSystem(); }
    void buildController() override {
        system_.setController("西门子840D控制器");
    }
    void buildSensor() override {
        system_.setSensor("西门子高精度编码器");
    }
    void buildDriver() override {
        system_.setDriver("西门子伺服驱动模块");
    }
    CNCSystem getResult() override { return system_; }
private:
    CNCSystem system_;
};

// 具体建造者:发那科系统
class FanucBuilder : public CNCBuilder {
public:
    FanucBuilder() { system_ = CNCSystem(); }
    void buildController() override {
        system_.setController("发那科30i控制器");
    }
    void buildSensor() override {
        system_.setSensor("发那科激光位移传感器");
    }
    void buildDriver() override {
        system_.setDriver("发那科α系列驱动模块");
    }
    CNCSystem getResult() override { return system_; }
private:
    CNCSystem system_;
};

// 指挥者:控制构建流程
class Director {
public:
    void construct(CNCBuilder& builder) {
        builder.buildController();
        builder.buildSensor();
        builder.buildDriver();
    }
};

// 客户端使用
int main() {
    Director director;
    
    SiemensBuilder siemensBuilder;
    director.construct(siemensBuilder);
    CNCSystem siemens = siemensBuilder.getResult();
    siemens.showConfig();

    FanucBuilder fanucBuilder;
    director.construct(fanucBuilder);
    CNCSystem fanuc = fanucBuilder.getResult();
    fanuc.showConfig();

    return 0;
}

输出结果

数控系统配置:
控制器: 西门子840D控制器
传感器: 西门子高精度编码器
驱动模块: 西门子伺服驱动模块

数控系统配置:
控制器: 发那科30i控制器
传感器: 发那科激光位移传感器
驱动模块: 发那科α系列驱动模块

模式优点

构建与表示分离:客户端无需了解内部组件细节,只需指定建造者类型。
灵活扩展:新增具体建造者即可支持新品牌数控系统(如三菱),无需修改指挥者逻辑。
流程控制:通过指挥者统一管理构建顺序,确保组件装配的稳定性。


应用场景

需要生成的对象具有复杂内部结构(如数控系统的多模块依赖)。
对象的构建过程需要独立于其组成部分(如不同品牌的组件混用)。

通过建造者模式,数控系统的构建过程被标准化,同时支持灵活扩展不同厂商的硬件配置。

相关文章:

  • Pytorch实现之SCGAN实现人脸修复
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter16-DOM2 和 DOM3
  • 数据在内存中的存储
  • 2025年02月17日Github流行趋势
  • JavaScript数组-创建数组
  • 投资组合风险管理
  • JDK 24:Java 24 中的新功能
  • 使用Java爬虫获取1688自定义API操作接口
  • Flutter 网络请求与数据处理:从基础到单例封装
  • 【吾爱出品】[Windows] 透明浏览器V1
  • 【Elasticsearch】监控与管理:集群安全管理
  • Rabbitmq的三个端口区分
  • 如何利用国内镜像从huggingface上下载项目
  • 实现可拖拽的 Ant Design Modal 并保持下层 HTML 可操作性
  • 人工智能(AI)的定义与硬件需求
  • 物理层芯片的Auto-negotiation(自动协商)的详细解释
  • 解决 matplotlib 不支持中文字符
  • C++(23):unreachable
  • 【算法与数据结构】字典树(Trie)详解
  • java爬虫抓取网页搜索数据
  • 专访|茸主:杀回UFC,只为给自己一个交代
  • 著名连环画家庞邦本逝世
  • 兰州大学教授安成邦加盟复旦大学中国历史地理研究所
  • 成都警方通报:8岁男孩落水父母下水施救,父亲遇难
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相
  • 青海规范旅游包车行为:不得引导外省籍旅游包车违规驻地运营