Builder 模式(建造者模式)
时间: 2023-10-29 10:55:02 浏览: 77
建造者模式(Builder 模式)是一种创建型设计模式,用于创建复杂对象。该模式将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
与工厂模式相比,建造者模式注重零部件的组装过程,而工厂模式更注重零部件的创建过程。建造者模式适用于产品的构建过程更复杂的情况,而工厂模式适用于产品的构建过程相对简单的情况。但是,建造者模式和工厂模式可以结合使用,通过将建造者模式的构建过程交给工厂模式来完成。
建造者模式的类图中还有一个“导演类”的角色,它负责根据客户端的需求调用建造者来构建对象。可以将这个导演类看作是最终调用的客户端,剩余的部分就可以看作是一个简单的工厂模式。
总的来说,建造者模式通过将复杂对象的创建过程分步进行,使得代码更加灵活、可扩展,并且使得对象的构建过程与表示分离,提高了代码的可读性和维护性。
相关问题
C++设计模式 建造者
建造者模式是一种创建型设计模式,它允许您创建不同类型的对象,而无需暴露对象的创建逻辑。它将对象的构建步骤分解为可重用的部分,并允许您按顺序执行它们。这使得您能够创建具有不同属性的对象,而无需编写大量的重复代码。
在建造者模式中,有一个建造者类,它负责创建对象的特定部分,如电脑的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对象。我们最后打印出这个对象的属性,以验证它是否被正确构建。
java建造者设计模式
Java建造者设计模式是一种创建型设计模式,它可以通过一步一步的方式构建复杂对象。该模式将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
在Java中,建造者设计模式通常由以下几个组成部分:
1. 产品(Product):表示被构建的复杂对象。它通常包含多个属性和方法。
2. 抽象建造者(Abstract Builder):定义了构建产品的抽象方法,包括设置产品属性的方法和获取构建结果的方法。
3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责具体的产品构建过程。它包含一个具体产品对象,并实现了抽象建造者中定义的方法。
4. 指挥者(Director):负责调用具体建造者来构建产品。它根据特定的构建顺序和逻辑来指导构建过程。
使用建造者设计模式可以将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这样可以提高代码的可读性和可维护性,并且可以灵活地改变产品的内部表示。