设计模式--建造者模式(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接口。

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

相关推荐
杨充14 小时前
10.可测试性实战设计
设计模式·开源·代码规范
杨充14 小时前
9.重构十二式的实战
设计模式·开源·代码规范
杨充14 小时前
6.设计原则的全景图
设计模式·开源·全栈
杨充15 小时前
2.面向对象的特性
设计模式
杨充15 小时前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充15 小时前
8.反模式与坏味道
设计模式·开源·代码规范
杨充15 小时前
3.接口vs抽象类比较
设计模式
咖啡八杯18 小时前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
咖啡八杯1 天前
GoF设计模式——解释器模式
java·后端·spring·设计模式