QT设计模式:抽象工厂模式

基本概念:

抽象工厂模式是一种创建型设计模式,封装了一组相关或依赖的对象的创建逻辑,而不需要指定具体的类。

使用抽象工厂模式,客户端可以创建一系列相关的对象,而无需关心这些对象的具体实现细节,从而实现了对象的创建和使用的解耦。

抽象工厂模式需要实现以下类:

  • 抽象工厂(Abstract Factory):定义了创建一系列相关对象的接口。
  • 具体工厂(Concrete Factory):实现了抽象工厂定义的接口,负责创建一系列相关的具体对象。
  • 抽象产品(Abstract Product):定义了一系列相关对象的接口。
  • 具体产品(Concrete Product):实现了抽象产品定义的接口,是一系列相关对象的具体实现。

使用场景:

  • 当需要一次性创建一组相关的对象,而这些对象之间存在着某种关联或依赖关系时。

  • 当系统需要支持多个产品族,并且希望客户端能够灵活地选择和切换不同的产品族时。

  • 对象的创建和使用需要解耦时。

实现:

复制代码
// 抽象产品A
class AbstractProductA {
public:
    virtual void operationA() const = 0;
};

// 具体产品A 1
class ConcreteProductA1 : public AbstractProductA {
public:
    void operationA() const override {
        // 具体产品 A1 的操作
    }
};

// 具体产品A 2
class ConcreteProductA2 : public AbstractProductA {
public:
    void operationA() const override {
        // 具体产品 A2 的操作
    }
};

// 抽象产品B
class AbstractProductB {
public:
    virtual void operationB() const = 0;
};

// 具体产品B 1
class ConcreteProductB1 : public AbstractProductB {
public:
    void operationB() const override {
        // 具体产品 B1 的操作
    }
};

// 具体产品B 2
class ConcreteProductB2 : public AbstractProductB {
public:
    void operationB() const override {
        // 具体产品 B2 的操作
    }
};
// 抽象工厂
class AbstractFactory {
public:
    virtual AbstractProductA* createProductA() = 0;
    virtual AbstractProductB* createProductB() = 0;
};

// 具体工厂 1
class ConcreteFactory1 : public AbstractFactory {
public:
    AbstractProductA* createProductA() override {
        return new ConcreteProductA1();
    }

    AbstractProductB* createProductB() override {
        return new ConcreteProductB1();
    }
};

// 具体工厂 2
class ConcreteFactory2 : public AbstractFactory {
public:
    AbstractProductA* createProductA() override {
        return new ConcreteProductA2();
    }

    AbstractProductB* createProductB() override {
        return new ConcreteProductB2();
    }
};

QT的模型类

QT的模型类的实现也体现了抽象工厂模式。

  • 抽象工厂(Abstract Factory) :例如 QAbstractItemModelQAbstractListModelQAbstractTableModel 等。这些抽象类定义了一组接口,用于创建模型类的实例。

  • 具体工厂(Concrete Factory) :例如 QStandardItemModelQSqlQueryModelQFileSystemModel 等,它们实现了 QAbstractItemModel 接口,并负责创建具体的模型对象。

  • 抽象产品(Abstract Product) :抽象产品可以是模型类中定义的接口和纯虚函数,例如 data()setData()rowCount()columnCount() 等。

  • 具体产品(Concrete Product) :。在 Qt 中,具体产品可以是继承自抽象模型类的具体模型类,例如 QStandardItemModelQSqlQueryModelQFileSystemModel 等。

相关推荐
颜酱1 天前
理解编程范式(前端角度)
设计模式
将编程培养成爱好1 天前
C++ 设计模式《账本事故:当备份被删光那天》
开发语言·c++·设计模式·备忘录模式
FogLetter1 天前
设计模式奇幻漂流:从单例孤岛到工厂流水线
前端·设计模式
guangzan1 天前
常用设计模式:代理模式
设计模式
西幻凌云1 天前
认识设计模式——单例模式
c++·单例模式·设计模式·线程安全·饿汉和懒汉
爱吃烤鸡翅的酸菜鱼1 天前
【Java】基于策略模式 + 工厂模式多设计模式下:重构租房系统核心之城市房源列表缓存与高性能筛选
java·redis·后端·缓存·设计模式·重构·策略模式
在未来等你2 天前
AI Agent设计模式 Day 5:Reflexion模式:自我反思与持续改进
设计模式·llm·react·ai agent·plan-and-execute
程序员三藏2 天前
快速弄懂POM设计模式
自动化测试·软件测试·python·selenium·测试工具·设计模式·职场和发展
Lei_3359672 天前
[設計模式]設計模式的作用
设计模式
将编程培养成爱好2 天前
C++ 设计模式《统计辅助功能》
开发语言·c++·设计模式·访问者模式