建造者模式(Builder Pattern)是一种创建型设计模式,它通过一步一步构建一个复杂对象来提供一种创建对象的方式。建造者模式允许你分步骤创建复杂对象,而不需要了解对象的内部表示。它特别适合用于创建那些包含许多步骤或部件的复杂对象。
特点
1、 分步骤构建:允许对象通过一系列步骤逐步创建;
2、 独立于具体实现:构建过程与表示分离,可以独立变化;
3、 更好的代码复用:不同的建造者可以复用相同的构建过程;
4、 细粒度控制:可以更精细地控制对象的构建过程;
5、 产品的一致性:确保在创建复杂对象时,每个部分都是完整且一致的;
适用场景
1、 对象的创建步骤需要独立顺序执行:例如,创建一个复杂对象时,步骤的顺序很重要;
2、 对象需要多种表示:同一个构建过程可以创建不同的表示;
3、 创建复杂对象:例如,构建一个复杂的产品(例如电脑、房子等),每个产品由多个部件组成;
示例
下面是一个使用C++实现建造者模式的示例。假设我们要构建一个复杂的 Computer
对象,这个对象包含多个部分(CPU、GPU、内存等)。
#include <iostream>
#include <string>
// Product
class Computer {
public:
void setCPU(const std::string& cpu) { CPU = cpu; }
void setGPU(const std::string& gpu) { GPU = gpu; }
void setRAM(const std::string& ram) { RAM = ram; }
void showSpecs() const {
std::cout << "CPU: " << CPU << "\n";
std::cout << "GPU: " << GPU << "\n";
std::cout << "RAM: " << RAM << "\n";
}
private:
std::string CPU;
std::string GPU;
std::string RAM;
};
// Builder Interface
class ComputerBuilder {
public:
virtual void buildCPU() = 0;
virtual void buildGPU() = 0;
virtual void buildRAM() = 0;
virtual Computer* getComputer() = 0;
};
// Concrete Builder
class GamingComputerBuilder : public ComputerBuilder {
public:
GamingComputerBuilder() { computer = new Computer(); }
void buildCPU() override { computer->setCPU("Intel i9"); }
void buildGPU() override { computer->setGPU("NVIDIA RTX 3080"); }
void buildRAM() override { computer->setRAM("32GB"); }
Computer* getComputer() override { return computer; }
private:
Computer* computer;
};
// Director
class Director {
public:
void setBuilder(ComputerBuilder* builder) { this->builder = builder; }
Computer* construct() {
builder->buildCPU();
builder->buildGPU();
builder->buildRAM();
return builder->getComputer();
}
private:
ComputerBuilder* builder;
};
// Main function
int main() {
Director director;
GamingComputerBuilder builder;
director.setBuilder(&builder);
Computer* gamingComputer = director.construct();
gamingComputer->showSpecs();
delete gamingComputer;
return 0;
}
输出
下面是该示例程序的输出,它显示了构建的 Computer
对象的规格:
CPU: Intel i9GPU: NVIDIA RTX 3080RAM:*32GB
示例说明
在这个示例中,我们展示了如何使用建造者模式来构建一个复杂的 Computer
对象。主要包括以下几个部分:
1、 Product(产品类):Computer
类,它代表我们要构建的复杂对象包含CPU、GPU和RAM三个部分,以及相应的设置和显示规格的方法;
2、 Builder(建造者接口):ComputerBuilder
是一个抽象类,定义了构建产品各部分的方法具体的建造者类将实现这些方法;
3、 ConcreteBuilder(具体建造者):GamingComputerBuilder
继承自ComputerBuilder
,实现了构建具体Computer
对象的步骤,包括设置CPU、GPU和RAM;
4、 Director(指挥者):Director
类负责控制构建过程,接收一个ComputerBuilder
对象,通过调用建造者的构建方法来创建产品;
5、 Client(客户端代码):在main
函数中,客户端代码创建了一个Director
和一个GamingComputerBuilder
对象,指挥者根据具体建造者对象构建出一个Computer
对象,并显示其规格;
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: