设计模式——建造者模式

概述:

建造者模式是一种创建型设计模式,主要用于将复杂对象的构建过程与其表示分离。

可以一步一步地创建一个复杂的对象,同时允许不同的建造者创建不同的对象表示。

核心思想:

  • 将一个复杂对象的构建过程拆分为多个步骤,每一步都可以定制;
  • 提供一种灵活的方式来构建不同的对象,而不需要关心构建的具体实现细节。

主要用于需要创建复杂对象、需要多种表示方式的对象。

建造者模式组成:

  1. 产品(Product) :
    1. 复杂对象的最终结果
    2. 由多个部分组成:如部件A、部件B
  2. 建造者(Builder) :
    1. 定义创建产品各部分的抽象接口
  3. 具体建造者(Concrete Builder) :
    1. 实现建造者接口,具体定义如何构建产品的各部分
  4. 指挥者(Director) :
    1. 调用建造者的方法,根据特定步骤指导对象的构建过程

代码实现:

cpp 复制代码
#include <iostream>
#include <string>
#include <memory>

using namespace std;

// 产品类(Product)
class Product {
public:
    void setPartA(const string& partA) {
        this->partA = partA;
    }
    void setPartB(const string& partB) {
        this->partB = partB;
    }
    void show() const {
        cout << "Product PartA=" << partA <<endl;
        cout << "Product PartB=" << partB <<endl;
    }

private:
    string partA;
    string partB;
};

// 抽象建造者(Builder)
class Builder {
public:
    virtual ~Builder() {}
    virtual void buildPartA() = 0;
    virtual void buildPartB() = 0;
    virtual shared_ptr<Product> getResult() = 0;
};

// 具体建造者(ConcreteBuilder)
class ConcreteBuilder : public Builder {
public:
    ConcreteBuilder() {
        product = make_shared<Product>();
    }
    void buildPartA() override {
        product->setPartA("PartA");
    }
    void buildPartB() override {
        product->setPartB("PartB");
    }
    shared_ptr<Product> getResult() override {
        return product;
    }
private:
    shared_ptr<Product> product;
};

// 指挥者(Director)
class Director {
public:
    explicit Director(shared_ptr<Builder> builder) : builder(builder) {}
    void construct(shared_ptr<Builder> builder) {
        builder->buildPartA();
        builder->buildPartB();
    }
private:
    shared_ptr<Builder> builder;
};

int main() {
    shared_ptr<Builder> builder = make_shared<ConcreteBuilder>();
    Director director(builder);
    director.construct(builder);

    shared_ptr<Product> product = builder->getResult();
    product->show();

    return 0;
}

Product: 是被建造的最终产品,包含多个部分(如PartA和PartB),这些部分通常是产品的不同组成部分,最终通过建造者模式将他们组合成一个完整的产品;所以这个类只负责存储产品的组成部分,并提供一个show()方法来显示这些部分的状态。

Builder: 抽象类,定义了构建各个部分的方法(buildPartA()和buildPartB())。还定义了一个getResult()方法,返回最终构建出来的产品;抽象建造者类定义了产品构建的通用步骤,而具体建造者类将根据需求来实现这些步骤,最后返回一个完整的产品。它的作用是规范化每个具体建造者类的接口。

ConcreteBuilder: 是Builder类的具体实现,负责实现构建各个产品部分的方法。它在buildPartA()和buildPaetB()中指定了产品每个部分的具体内容。getResult()方法返回最终建造的产品;每个 ConcreteBuilder 都实现了 Builder 类的接口,具体化了产品构建的每个步骤。你可以创建不同的 ConcreteBuilder 来构建不同的产品,这使得建造过程和产品的变化是解耦的。

Director: Director 类负责指挥产品的构建过程。它使用建造者(Builder)来按照一定的顺序和步骤构建产品。它不关心具体产品的细节,只是通过调用建造者的接口来构建产品。Director 类通过协调 Builder 类的操作,控制构建过程的顺序。它将产品的创建过程从 Client(客户端)中抽象出来,使得客户端不必关心产品的具体构建步骤,只需要通过指挥者来构建产品。

补充说明:explicit关键字:用来修饰只有一个参数的类构造函数,以表明该构造函数是显式的,而非隐式的。当使用explicit修饰构造函数时,它将禁止类对象之间的隐式转换,以及禁止隐式调用拷贝构造函数。

相关推荐
geovindu11 小时前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
SENKS_DIGITAL13 小时前
金属加工遇上数字化:通快展厅里的工业蜕变-森克思科技
科技·设计模式·展厅设计·展馆设计·科技展厅设计·展览设计·企业展厅设计
flower98032314 小时前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构
zzu123zsw2 天前
业务拆分后的治理深水区:解构企业级微服务六大核心设计模式与高可用落真实践
微服务·设计模式·架构·高可用·微服务架构设计
牧瀬クリスだ2 天前
观察者模式:一个对象变化,一群对象自动响应
java·观察者模式·设计模式
拆房老料2 天前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
MobotStone2 天前
AI 写代码越来越爽,但程序员可能越来越废了
人工智能·设计模式
墨子夕2 天前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(前言篇)
java·开发语言·设计模式
墨子夕2 天前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(第一篇)
java·python·设计模式
General_G2 天前
创建型模式—原型(Prototype)模式
c++·设计模式·原型模式