建造者模式(Builder Pattern)是一种对象构建设计模式,它提供了一种构建对象的最佳方式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在建造者模式中,一个导演(Director)负责组织各个部分(Builder)的构建步骤,一个抽象构建器(Abstract Builder)定义了各个部分的构建和产品的组装,一个具体构建器(Concrete Builder)实现了抽象构建器所定义的各个构建操作。
下面是一个使用C++实现的简单示例:
复制
#include <iostream>
#include <string>
#include <vector>
// 抽象构建器
class IProduct {
public:
virtual void show() = 0;
};
// 具体构建器A
class ProductA : public IProduct {
public:
void show() override {
std::cout << "ProductA" << std::endl;
}
};
// 具体构建器B
class ProductB : public IProduct {
public:
void show() override {
std::cout << "ProductB" << std::endl;
}
};
// 抽象建造者
class IBuilder {
public:
virtual void setPartA() = 0;
virtual void setPartB() = 0;
virtual IProduct* getProduct() = 0;
};
// 具体建造者1
class Builder1 : public IBuilder {
private:
IProduct* product = nullptr;
public:
void setPartA() override {
// 实现部分A的构建操作...
product = new ProductA(); // 创建具体产品A对象
}
void setPartB() override {
// 实现部分B的构建操作...
product = new ProductB(); // 创建具体产品B对象
}
IProduct* getProduct() override {
return product; // 返回产品对象指针
}
};
// 具体建造者2
class Builder2 : public IBuilder {
private:
IProduct* product = nullptr;
public:
void setPartA() override {
// 实现部分A的构建操作...
product = new ProductB(); // 创建具体产品B对象
}
void setPartB() override {
// 实现部分B的构建操作...
product = new ProductA(); // 创建具体产品A对象
}
IProduct* getProduct() override {
return product; // 返回产品对象指针
}
};
// 导演类,负责组织各个部分的构建步骤,并返回最终产品对象指针。
class Director {
private:
IBuilder* builder = nullptr; // 指向当前正在构建的对象的具体建造者对象指针。
public:
void setBuilder(IBuilder* b) { builder = b; } // 设置当前正在构建的对象的具体建造者对象指针。
void buildPartA() { builder->setPartA(); } // 执行部分A的构建操作。
void buildPartB() { builder->setPartB(); } // 执行部分B的构建操作。
IProduct* getProduct() { return builder->getProduct(); } // 返回最终的产品对象指针。如果当前建造者对象还没有被组装完成,则先调用其组装方法组装完成后再返回产品对象指针。如果当前建造者对象已经被组装完成,则直接返回其产品对象指针。如果当前建造者对象为空,则先调用其组装方法组装完成后再返回产品对象指针。如果当前建造者对象为空且已经被组装完成,则直接返回其产品对象指针。如果当前建造者对象为空且还没有被组装完成,则先调用其组装方法组装完成后再返回产品对象指针。
标签:--,组装,建造,对象,构建,设计模式,指针
From: https://www.cnblogs.com/yubo-guan/p/18008849