建造者设计模式(GPT4生成)

文章介绍了如何通过建造者模式定义Computer类及其Builder类,如ComputerBuilder和GamingComputerBuilder,以及Director类的使用,以实现对象的清晰构建和扩展。
摘要由CSDN通过智能技术生成

Computer类定义

首先定义Computer类,它包含了一些基本组件:

class Computer {
public:
    void setCPU(const QString &cpu) { this->cpu = cpu; }
    void setRAM(const QString &ram) { this->ram = ram; }
    void setHardDisk(const QString &hardDisk) { this->hardDisk = hardDisk; }

    QString getConfiguration() const {
        return "CPU: " + cpu + ", RAM: " + ram + ", Hard Disk: " + hardDisk;
    }

private:
    QString cpu;
    QString ram;
    QString hardDisk;
};

ComputerBuilder类定义

接下来,定义ComputerBuilder抽象类,它声明了构建Computer所需的步骤:

class ComputerBuilder {
public:
    virtual ~ComputerBuilder() {}

    Computer* getComputer() { return computer; }

    void createNewComputer() { computer = new Computer(); }
    virtual void buildCPU() = 0;
    virtual void buildRAM() = 0;
    virtual void buildHardDisk() = 0;

protected:
    Computer* computer;
};

具体建造者类

然后,创建具体的建造者类,如GamingComputerBuilder,它实现了ComputerBuilder中定义的抽象方法:

class GamingComputerBuilder : public ComputerBuilder {
public:
    void buildCPU() override { computer->setCPU("High-end CPU"); }
    void buildRAM() override { computer->setRAM("16GB"); }
    void buildHardDisk() override { computer->setHardDisk("1TB SSD"); }
};

Director类

最后,创建一个Director类,它负责管理建造过程:

class Director {
public:
    void setComputerBuilder(ComputerBuilder* builder) { this->builder = builder; }

    Computer* getComputer() {
        return builder->getComputer();
    }

    void constructComputer() {
        builder->createNewComputer();
        builder->buildCPU();
        builder->buildRAM();
        builder->buildHardDisk();
    }

private:
    ComputerBuilder* builder;
};

使用示例

使用这些类来构建一个计算机对象:

int main() {
    Director director;
    GamingComputerBuilder builder;

    director.setComputerBuilder(&builder);
    director.constructComputer();

    Computer* computer = director.getComputer();
    qDebug() << computer->getConfiguration();

    delete computer;
    return 0;
}

代码分析

总的来说,通过使用建造者模式,代码结构更加清晰,扩展性和灵活性提高,同时也使得构建复杂对象的过程更加容易管理和维护。

  1. Computer类:这个类代表了复杂对象(在此例中是计算机)。它包含了几个基本部件(CPU、RAM、硬盘),以及一个方法getConfiguration用于返回构建好的计算机的配置信息。

  2. ComputerBuilder抽象类:这是一个抽象基类,定义了构建Computer对象所需的步骤。它包含了一个指向Computer对象的指针,并提供了创建新Computer对象的方法createNewComputer。此外,它定义了几个纯虚函数(buildCPUbuildRAMbuildHardDisk),这些函数在具体的建造者类中实现。

  3. 具体建造者类(如GamingComputerBuilder):这些类继承自ComputerBuilder并实现了其抽象方法。每个具体建造者类都会以不同的方式构建Computer的各个部分,例如GamingComputerBuilder提供了高性能的CPU和大容量的RAM。

  4. Director类:这个类负责指导构建过程。它持有一个ComputerBuilder对象的引用,并通过这个引用来调用建造步骤。最后,Director提供了一个方法getComputer来获取最终构建的Computer对象。

    优点

  5. 分离构建复杂对象的过程和表示:建造者模式将一个复杂对象的构建(即Computer对象)与其表示分离。这使得同样的构建过程可以创建不同的表示。

  6. 更好的可扩展性和灵活性:可以很容易地添加新的ComputerBuilder子类来构建不同类型的Computer对象,无需修改现有代码。这符合开闭原则,使系统更容易扩展和维护。

  7. 更清晰的业务逻辑:由于构建过程被封装在Director类中,使用者只需与Director交互就能构建对象,无需关心构建的细节,使得业务逻辑更加清晰。

  8. 逐步构建:建造者模式允许对象的逐步构建。在某些场景下,这种逐步构建是非常必要的,特别是当构建过程复杂或者构建步骤需要顺序执行时。

  9. 更好的控制构建过程:Director类的引入提供了对构建过程的更好控制。可以在Director中定义复杂的构建顺序逻辑,使得构建过程更加灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LanSe___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值