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

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

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

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

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

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

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

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

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>