软件开发经典设计模式:创建型-建造者模式

        建造者模式(Builder Pattern)是一种创建型设计模式,旨在分步骤创建一个复杂对象,并可以通过不同的配置来获得不同表现的对象。与其他对象创建模式不同,建造者模式更加关注于对象创建的过程。

        核心思想:建造者模式将对象的构建过程与最终表示分离,使同样的构建过程可以创建不同的表示。它通常实现为一个构建器类,提供一系列的方法用于配置对象的不同部分,然后通过一个“指导者”(Director)类协调这些方法的调用顺序,以构建最终对象。

组成部分

  1. 产品(Product):最终创建的复杂对象。

  2. 建造者(Builder):抽象接口,定义创建产品各部分的方法。

  3. 具体建造者(ConcreteBuilder):实现 Builder 接口,进行具体的部件构造,最后返回完整的产品。

  4. 指导者(Director):使用 Builder 的方法定义构建产品的顺序。

#include <iostream>
#include <string>

// 产品类,代表一个复杂对象
class Product {
public:
    void setPartA(const std::string& part) { partA = part; }
    void setPartB(const std::string& part) { partB = part; }
    void setPartC(const std::string& part) { partC = part; }

    void showProduct() {
        std::cout << "Product Parts: " << partA << ", " << partB << ", " << partC << std::endl;
    }

private:
    std::string partA;
    std::string partB;
    std::string partC;
};

// 抽象建造者接口
class Builder {
public:
    virtual ~Builder() = default;
    virtual void buildPartA() = 0;
    virtual void buildPartB() = 0;
    virtual void buildPartC() = 0;
    virtual Product getProduct() = 0;
};

// 具体建造者
class ConcreteBuilder : public Builder {
public:
    ConcreteBuilder() { reset(); }

    void buildPartA() override { product.setPartA("Part A1"); }
    void buildPartB() override { product.setPartB("Part B1"); }
    void buildPartC() override { product.setPartC("Part C1"); }

    Product getProduct() override {
        Product p = product;
        reset();
        return p;
    }

private:
    void reset() { product = Product(); }
    Product product;
};

// 指导者类
class Director {
public:
    void setBuilder(Builder* builder) { this->builder = builder; }
    
    // 定义创建对象的具体步骤
    void buildMinimalViableProduct() {
        builder->buildPartA();
    }

    void buildFullFeaturedProduct() {
        builder->buildPartA();
        builder->buildPartB();
        builder->buildPartC();
    }

private:
    Builder* builder;
};

int main() {
    Director director;
    ConcreteBuilder builder;
    director.setBuilder(&builder);

    director.buildMinimalViableProduct();
    Product product1 = builder.getProduct();
    product1.showProduct();

    director.buildFullFeaturedProduct();
    Product product2 = builder.getProduct();
    product2.showProduct();

    return 0;
}

特点和优点

  • 分步骤创建:可以按顺序逐步构建复杂对象,而不需要知道组成该对象的细节。

  • 灵活性:允许产品的部分是可替换的,可以容易地创建不同的表示。

  • 可读性增强:由于构建逻辑是分开的(通过 builder 而非复杂的构造函数),代码更加易读。

使用场景

  • 需要生成复杂对象:如果对象需要许多步骤或者可以有不同表示。

  • 需要创建组合对象:例如 GUI 界面,部件设置可能需要顺序可调整。

  • 不希望使用复杂构造器:避免直接使用复杂的构造函数,或者需要可变初始化参数集的应用。

        建造者模式非常适合创建复杂对象时使用,特别是当对象的某些部分是可选的或变量初始化过程较复杂的情况下。通过结构化建造过程,增强代码的可读性和可维护性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值