自学内容网 自学内容网

代理模式演示(C++)三分钟读懂

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建复杂对象的过程与其表示分离,从而可以使用相同的构建过程来创建不同的表示。

下面是一个使用C++和Qt框架演示建造者模式的示例:

演示代码:

#include <QCoreApplication>
#include <QDebug>

// 产品类
class Product {
public:
       // 写入相关参数
    void setPartA(const QString& partA) {
        m_partA = partA;
    }

    void setPartB(const QString& partB) {
        m_partB = partB;
    }

    void setPartC(const QString& partC) {
        m_partC = partC;
    }

    // 打印参数
    void show() {
        qDebug() << "Product parts: " << m_partA << ", " << m_partB << ", " << m_partC;
    }

private:
    // 产品参数
    QString m_partA;
    QString m_partB;
    QString m_partC;
};

// 抽象构造者类
class Builder {
public:
    virtual void buildPartA() = 0;
    virtual void buildPartB() = 0;
    virtual void buildPartC() = 0;
    virtual Product* getProduct() = 0;
};

// 具体构造者类 继承抽象构造类
class ConcreteBuilder : public Builder {
public:
    // 创建一个 产品类 
    ConcreteBuilder() {
        m_product = new Product();
    }
    // 给产品类 写入参数
    void buildPartA() override {
        m_product->setPartA("Part A");
    }

    void buildPartB() override {
        m_product->setPartB("Part B");
    }

    void buildPartC() override {
        m_product->setPartC("Part C");
    }

    // 返回产品指针
    Product* getProduct() override {
        return m_product;
    }

private:
    Product* m_product;
};

// 指导者类    用于给具体构造类写入参数
class Director {
public:
    // 构造产品    传入具体构造类的指针
    void construct(Builder* builder) {
        builder->buildPartA();
        builder->buildPartB();
        builder->buildPartC();
    }
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    Director director;    // 指导者实例
    ConcreteBuilder builder;    // 具体构造者实例

    director.construct(&builder);    // 传入对象给指导者

    Product* product = builder.getProduct();    // 构造者将指导者构造好的对象返回给 产品类
    product->show();    // 输出产品参数

    return a.exec();
}

在这个示例中,我们定义了一个产品类Product,包含了产品的不同部分。抽象构造者类Builder定义了构建产品的接口,具体构造者类ConcreteBuilder实现了构建产品的具体步骤。指导者类Director负责控制构建的过程。

main函数中,我们创建了一个指导者对象Director和一个具体构造者对象ConcreteBuilder,指导者通过具体构造者构建产品,并最终得到一个完整的产品对象并展示。

建造者模式的优点:

  1. 分离构建过程和表示: 建造者模式允许你通过相同的构建过程创建不同的表示,从而将构建过程与具体表示分离。

  2. 更好的控制对象的创建过程: 建造者模式可以让你更加灵活地控制对象的创建过程,可以根据需求定制不同的构建流程。

  3. 更好的复用性: 可以复用相同的构建过程来构建不同的对象,提高代码的复用性。

建造者模式的缺点:

  1. 增加了对象的数量: 建造者模式引入了多个类(产品类、抽象构造者类、具体构造者类),可能会增加系统中类的数量,导致复杂性增加。

  2. 构建过程的复杂性: 如果产品对象的部分较多,构建过程也会变得复杂,需要仔细设计构造者类的接口和实现。

建造者模式适用于创建复杂对象,特别是当对象的创建过程比较复杂或者存在多个表示时。它可以帮助我们更好地控制对象的创建过程,提高灵活性和复用性。

建造者模式类图:


原文地址:https://blog.csdn.net/qq_39085747/article/details/143024540

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!