C++设计模式 建造者
时间: 2023-10-11 17:09:58 浏览: 110
建造者模式是一种创建型设计模式,它允许您创建不同类型的对象,而无需暴露对象的创建逻辑。它将对象的构建步骤分解为可重用的部分,并允许您按顺序执行它们。这使得您能够创建具有不同属性的对象,而无需编写大量的重复代码。
在建造者模式中,有一个建造者类,它负责创建对象的特定部分,如电脑的CPU、内存和硬盘等。该类具有一个公共接口,该接口定义了每个部分的构建步骤。在构建步骤完成后,该类可以返回一个完整的对象。
建造者模式也包括一个指导者类,它负责调用建造者类的构建步骤,并按照正确的顺序执行它们。指导者类知道如何创建对象,但不知道如何创建对象的每个部分,因此它将这个工作委托给建造者类。
以下是一个简单的C++实现建造者模式的示例代码:
```cpp
#include <iostream>
#include <string>
class Computer {
public:
void setCPU(const std::string& cpu) {
m_cpu = cpu;
}
void setMemory(const std::string& memory) {
m_memory = memory;
}
void setHardDisk(const std::string& hardDisk) {
m_hardDisk = hardDisk;
}
void show() {
std::cout << "CPU: " << m_cpu << std::endl;
std::cout << "Memory: " << m_memory << std::endl;
std::cout << "Hard Disk: " << m_hardDisk << std::endl;
}
private:
std::string m_cpu;
std::string m_memory;
std::string m_hardDisk;
};
class Builder {
public:
virtual ~Builder() {}
virtual void buildCPU() = 0;
virtual void buildMemory() = 0;
virtual void buildHardDisk() = 0;
virtual Computer* getResult() = 0;
};
class Director {
public:
void setBuilder(Builder* builder) {
m_builder = builder;
}
void construct() {
m_builder->buildCPU();
m_builder->buildMemory();
m_builder->buildHardDisk();
}
private:
Builder* m_builder;
};
class DesktopBuilder : public Builder {
public:
DesktopBuilder() {
m_computer = new Computer;
}
~DesktopBuilder() {
delete m_computer;
}
void buildCPU() {
m_computer->setCPU("Intel Core i7");
}
void buildMemory() {
m_computer->setMemory("16GB DDR4 RAM");
}
void buildHardDisk() {
m_computer->setHardDisk("2TB SATA Hard Disk");
}
Computer* getResult() {
return m_computer;
}
private:
Computer* m_computer;
};
int main() {
Director director;
DesktopBuilder desktopBuilder;
director.setBuilder(&desktopBuilder);
director.construct();
Computer* computer = desktopBuilder.getResult();
computer->show();
return 0;
}
```
在这个示例中,我们创建了一个Computer类,它有三个成员变量:CPU、内存和硬盘。我们还创建了一个Builder类,它定义了创建Computer对象的构建步骤,并且为每个部分提供了一个抽象接口。我们还创建了一个Director类,它负责调用建造者类的构建步骤,并按照正确的顺序执行它们。
在具体的建造者实现中,我们创建了一个DesktopBuilder类,它实现了Builder接口,并具有一个Computer成员变量。在DesktopBuilder类的构建步骤中,我们设置了Computer对象的CPU、内存和硬盘。最后,我们返回一个完整的Computer对象。
在main函数中,我们创建了一个Director对象,并将DesktopBuilder对象传递给setBuilder函数。然后我们调用construct函数,它将调用DesktopBuilder的构建步骤,并返回一个完整的Computer对象。我们最后打印出这个对象的属性,以验证它是否被正确构建。
阅读全文
相关推荐

















