设计模式--建造者(Builder)模式

建造者模式(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(); } // 返回最终的产品对象指针。如果当前建造者对象还没有被组装完成,则先调用其组装方法组装完成后再返回产品对象指针。如果当前建造者对象已经被组装完成,则直接返回其产品对象指针。如果当前建造者对象为空,则先调用其组装方法组装完成后再返回产品对象指针。如果当前建造者对象为空且已经被组装完成,则直接返回其产品对象指针。如果当前建造者对象为空且还没有被组装完成,则先调用其组装方法组装完成后再返回产品对象指针。
posted @   guanyubo  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示