以下是一个使用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 setPartC(const std::string& partC) {
        partC_ = partC;
    }

    void show() {
        std::cout << "Part A: " << partA_ << std::endl;
        std::cout << "Part B: " << partB_ << std::endl;
        std::cout << "Part C: " << partC_ << std::endl;
    }

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

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

// 具体建造者类
class ConcreteBuilder : public Builder {
public:
    void buildPartA() override {
        product_->setPartA("Part A");
    }

    void buildPartB() override {
        product_->setPartB("Part B");
    }

    void buildPartC() override {
        product_->setPartC("Part C");
    }

    Product* getProduct() override {
        return product_;
    }

private:
    Product* product_ = new Product();
};

// 指挥者类
class Director {
public:
    void setBuilder(Builder* builder) {
        builder_ = builder;
    }

    Product* construct() {
        builder_->buildPartA();
        builder_->buildPartB();
        builder_->buildPartC();
        return builder_->getProduct();
    }

private:
    Builder* builder_;
};

int main() {
    ConcreteBuilder builder;
    Director director;
    director.setBuilder(&builder);

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

    delete product;

    return 0;
}

在以上示例中,Product是要构建的产品类,Builder是抽象建造者类,定义了构建产品的抽象方法。ConcreteBuilder是具体建造者类,实现了抽象建造者类的方法,并返回构建好的产品。Director是指挥者类,负责调用具体建造者的方法来构建产品。

main函数中,首先创建了一个具体建造者对象ConcreteBuilder和一个指挥者对象Director。然后通过调用指挥者的setBuilder方法将具体建造者对象传入指挥者。接下来,通过调用指挥者的construct方法来构建产品,并将构建好的产品赋给product指针。最后,调用产品的show方法展示产品的内容,并释放内存

用C++实现建造模式

原文地址: http://www.cveoy.top/t/topic/hAes 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录