设计模式之c++建造者模式(示例代码)
建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程和表示分离,使得同样的构建过程可以创建不同的表示。
在 C++ 中实现建造者模式,通常需要定义一个抽象的建造者接口和具体的建造者类,以及一个具体的产品类和一个指挥者类。
以下是一个简单的 C++ 建造者模式示例代码:
#include <iostream> #include <string> // 抽象的建造者接口 class Builder { public: virtual void buildPartA() = 0; virtual void buildPartB() = 0; virtual void buildPartC() = 0; }; // 具体的建造者类 class ConcreteBuilder : public Builder { private: std::string m_partA; std::string m_partB; std::string m_partC; public: void buildPartA() override { m_partA = "Part A"; } void buildPartB() override { m_partB = "Part B"; } void buildPartC() override { m_partC = "Part C"; } // 获取构建完成的产品 std::string getProduct() { return m_partA + " " + m_partB + " " + m_partC; } }; // 具体的产品类 class Product { private: std::string m_parts; public: void setParts(std::string parts) { m_parts = parts; } std::string getParts() { return m_parts; } }; // 指挥者类 class Director { public: // 构建产品的方法,接受一个建造者对象作为参数 void construct(Builder* builder) { builder->buildPartA(); builder->buildPartB(); builder->buildPartC(); } }; int main() { ConcreteBuilder builder; Director director; // 构建产品 director.construct(&builder); std::string product = builder.getProduct(); std::cout << "Product: " << product << std::endl; // 将构建完成的产品传递给具体的产品对象 Product finalProduct; finalProduct.setParts(product); std::cout << "Final product: " << finalProduct.getParts() << std::endl; return 0; }
在上面的示例中,抽象的建造者接口 Builder 定义了构建产品的方法,具体的建造者类 ConcreteBuilder 实现了这些方法,并提供了一个 getProduct() 方法返回构建完成的产品。具体的产品类 Product 定义了产品的属性和方法,指挥者类 Director 负责构建产品的过程。
在 main() 函数中,我们首先创建一个 ConcreteBuilder 对象和一个 Director 对象,然后调用指挥者的 construct() 方法来构建产品。最后,我们将构建完成的产品传递给具体的产品对象 finalProduct 并输出其属性。