抽象工厂设计模式(GPT4生成)

 使用Qt与C++来完成编写。

AbstractFactory.h:

#ifndef ABSTRACTFACTORY_H
#define ABSTRACTFACTORY_H

#include <iostream>
#include <QString>

// 抽象产品:Button
class AbstractButton {
public:
    virtual QString color() = 0;
};

// 抽象产品:TextBox
class AbstractTextBox {
public:
    virtual QString textColor() = 0;
};

// 具体产品:DarkButton
class DarkButton : public AbstractButton {
public:
    QString color() {
        return "Dark";
    }
};

// 具体产品:LightButton
class LightButton : public AbstractButton {
public:
    QString color() {
        return "Light";
    }
};

// 具体产品:DarkTextBox
class DarkTextBox : public AbstractTextBox {
public:
    QString textColor() {
        return "White";
    }
};

// 具体产品:LightTextBox
class LightTextBox : public AbstractTextBox {
public:
    QString textColor() {
        return "Black";
    }
};

// 抽象工厂
class AbstractThemeFactory {
public:
    virtual AbstractButton* createButton() = 0;
    virtual AbstractTextBox* createTextBox() = 0;
};

// 具体工厂:DarkThemeFactory
class DarkThemeFactory : public AbstractThemeFactory {
public:
    AbstractButton* createButton() {
        return new DarkButton();
    }
    AbstractTextBox* createTextBox() {
        return new DarkTextBox();
    }
};

// 具体工厂:LightThemeFactory
class LightThemeFactory : public AbstractThemeFactory {
public:
    AbstractButton* createButton() {
        return new LightButton();
    }
    AbstractTextBox* createTextBox() {
        return new LightTextBox();
    }
};


#endif // ABSTRACTFACTORY_H
main.cpp:

#include <QCoreApplication>
#include "AbstractFactory.h"

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

    AbstractThemeFactory* factory = new DarkThemeFactory();
    AbstractButton* button = factory->createButton();
    AbstractTextBox* textBox = factory->createTextBox();

    std::cout << "Button color: " << button->color().toStdString() << ", TextBox textColor: " << textBox->textColor().toStdString() << std::endl;

    // 清理资源
    delete button;
    delete textBox;
    delete factory;

    // 使用浅色主题工厂
    factory = new LightThemeFactory();
    button = factory->createButton();
    textBox = factory->createTextBox();

    std::cout << "Button color: " << button->color().toStdString() << ", TextBox textColor: " << textBox->textColor().toStdString() << std::endl;

    // 清理资源
    delete button;
    delete textBox;
    delete factory;

    return a.exec();
}

在这个示例中,我们定义了两个抽象产品:AbstractButtonAbstractTextBox。然后,我们为深色和浅色主题分别定义了这些抽象产品的具体实现。

接下来,我们定义了一个抽象工厂 AbstractThemeFactory,它可以创建这两种产品,然后我们为深色和浅色主题分别定义了具体工厂。

main() 函数中,我们演示了如何使用这些工厂来创建并使用不同主题的按钮和文本框。

这样,如果以后我们想要添加更多的主题或组件,我们只需要扩展相应的工厂和产品即可,而不需要修改现有代码。这就是使用抽象工厂模式的好处。希望这个示例能帮助你更好地理解这个设计模式!

https://chat.openai.com/share/d8d467d9-cded-426b-90f8-120f6d56a825

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LanSe___

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

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

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

打赏作者

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

抵扣说明:

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

余额充值