设计模式--建造者模式(Builder Pattern)

建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种构建对象的最佳方式。建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式主要包含以下几个角色:

  1. Builder(抽象建造者):为创建一个Product对象的各个部件指定抽象接口。
  2. ConcreteBuilder(具体建造者):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
  3. Director(指挥者):构造一个使用Builder接口的对象。
  4. Product(产品角色):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。

建造者模式的主要优点是:

  • 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更清晰。
  • 允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

建造者模式适用于以下场景:

  • 需要生成的对象具有复杂的内部结构。
  • 需要生成的对象内部属性本身相互依赖。

以下是一个简单的C++实现的建造者模式(Builder Pattern)示例:

c 复制代码
#include <iostream>
#include <string>

// 产品类
class Product {
public:
    void setPartA(const std::string& partA) {
        partA_ = partA;
    }
    void setPartB(const std::string& partB) {
        partB_ = partB;
    }
    void show() {
        std::cout << "Product contains: " << partA_ << ", " << partB_ << std::endl;
    }

private:
    std::string partA_;
    std::string partB_;
};

// 抽象建造者类
class Builder {
public:
    virtual void buildPartA() = 0;
    virtual void buildPartB() = 0;
    virtual Product* getProduct() = 0;
    virtual ~Builder() {}
};

// 具体建造者类
class ConcreteBuilder : public Builder {
public:
    ConcreteBuilder() {
        product_ = new Product();
    }
    void buildPartA() override {
        product_->setPartA("Part A");
    }
    void buildPartB() override {
        product_->setPartB("Part B");
    }
    Product* getProduct() override {
        return product_;
    }

private:
    Product* product_;
};

// 指挥者类
class Director {
public:
    Director(Builder* builder) : builder_(builder) {}
    void construct() {
        builder_->buildPartA();
        builder_->buildPartB();
    }

private:
    Builder* builder_;
};

int main() {
    Builder* builder = new ConcreteBuilder();
    Director* director = new Director(builder);

    director->construct();
    Product* product = builder->getProduct();
    product->show();

    delete director;
    delete builder;

    return 0;
}

在这个例子中,Product是产品类,Builder是抽象建造者类,定义了创建产品的接口。ConcreteBuilder是具体建造者类,实现了抽象建造者接口中定义的接口。

Director是指挥者类,它构造一个使用Builder接口的对象。在Director的construct接口中,调用了Builder的buildPartA和buildPartB接口。

通过这种方式,我们可以将复杂产品的创建步骤分解在不同的方法中,使得创建过程更清晰,允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

相关推荐
Cosolar6 分钟前
DeepSeek Harness 理解 Harness 的设计哲学 - 可组合的插件运行时
人工智能·设计模式·架构
Nebula_g1 小时前
JavaSE基础语法:特殊类(特殊情景下的设计模式)
java·开发语言·设计模式
George_Ye16 小时前
同一本书,一人一份:我如何设计 AI 个性化扫书报告
设计模式
莫得感情 o1 天前
设计模式 22 · 三个冷门模式:中介者、访问者、解释器
java·设计模式
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
AustinXu2 天前
从 Claude Code 到 Claude Tag,Harness Engineering 走到了组织这一层
设计模式·团队管理
剧中有戏2 天前
单例模式从入门到精通:一个数据库连接池的完整剖析
设计模式
胡萝卜术2 天前
编译期与运行期的双重防线:从 TypeScript 类型之争到 LLM 输出的自动化择优
前端·设计模式·面试
货拉拉技术2 天前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
KhalilRuan2 天前
设计模式小记
设计模式